<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.deltaworlds.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xan</id>
	<title>DeltaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.deltaworlds.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Xan"/>
	<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php/Special:Contributions/Xan"/>
	<updated>2026-04-30T20:15:40Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=DeltaWorlds_(software)&amp;diff=240</id>
		<title>DeltaWorlds (software)</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=DeltaWorlds_(software)&amp;diff=240"/>
		<updated>2026-02-09T14:59:54Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Browser_screenshot.jpg|400px|thumb|Active Worlds Software]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Delta Worlds&#039;&#039;&#039;, home of [[AW]] (the Internet&#039;s largest virtual world) is a software package created for preserving Active Worlds history and carrying on its legacy.&lt;br /&gt;
&lt;br /&gt;
== Current Version ==&lt;br /&gt;
*Browser: &#039;&#039;{{ver}}&#039;&#039;&lt;br /&gt;
*World Server: &#039;&#039;{{ver worldserv}}&#039;&#039;&lt;br /&gt;
*SDK: &#039;&#039;{{ver sdk}}&#039;&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
==Version Update Logs==&lt;br /&gt;
*[[Early Changelists]]&lt;br /&gt;
*[[New Features in 6.2 | 6.2]]&lt;br /&gt;
*[[New Features in 5.1 | 5.1]]&lt;br /&gt;
*[[New Features in 3.6 Classic | 3.6 Classic]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=DeltaWorlds_(software)&amp;diff=239</id>
		<title>DeltaWorlds (software)</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=DeltaWorlds_(software)&amp;diff=239"/>
		<updated>2026-02-09T14:59:32Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Browser_screenshot.jpg|400px|thumb|Active Worlds Software]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Delta Worlds&#039;&#039;&#039;, home of [[AW]] (the Internet&#039;s largest virtual world) is a software package created for preserving Active Worlds history and carrying on its legacy.&lt;br /&gt;
&lt;br /&gt;
== Current Version ==&lt;br /&gt;
*Browser: &#039;&#039;{{ver}}&#039;&#039;&lt;br /&gt;
*World Server: &#039;&#039;{{ver worldserv}}&#039;&#039;&lt;br /&gt;
*SDK: &#039;&#039;{{ver sdk}}&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Classic Version ==&lt;br /&gt;
*Browser: &#039;&#039;{{ver classic}}&#039;&#039;&lt;br /&gt;
*World Server: &#039;&#039;{{ver worldservclassic}}&#039;&#039;&lt;br /&gt;
*SDK: &#039;&#039;{{ver sdkclassic}}&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Version Update Logs==&lt;br /&gt;
*[[Early Changelists]]&lt;br /&gt;
*[[New Features in 6.2 | 6.2]]&lt;br /&gt;
*[[New Features in 5.1 | 5.1]]&lt;br /&gt;
*[[New Features in 3.6 Classic | 3.6 Classic]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Main_Page&amp;diff=238</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Main_Page&amp;diff=238"/>
		<updated>2026-02-09T14:55:52Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;padding:15px; background:#E8E8E8; width:100%; -moz-border-radius:50px; -webkit-border-radius:23px; border-radius:23px;margin-bottom:0px&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding-right:12px&amp;quot; align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;|[[Image:Worlds_small.png|DW::Universes]]&lt;br /&gt;
| style=&amp;quot;background:#FFFFFF; vertical-align: middle; padding:10px; width:100%; -moz-border-radius:23px; -webkit-border-radius:23px; border-radius:23px;&amp;quot; |&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
Welcome to the &#039;&#039;&#039;DeltaWiki&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The virtual encyclopaedia of [[DeltaWorlds (software)|DeltaWorlds]] and the respective 3D universes.&lt;br /&gt;
&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Current Version ==&lt;br /&gt;
*Browser: &#039;&#039;{{ver}}&#039;&#039;&lt;br /&gt;
*World Server: &#039;&#039;{{ver worldserv}}&#039;&#039;&lt;br /&gt;
*SDK: &#039;&#039;{{ver sdk}}&#039;&#039;&lt;br /&gt;
== Linux Client ==&lt;br /&gt;
*Browser: 6.2 (Please use Wine or Proton)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;padding:15px; background:#E8E8E8; width:100%; -moz-border-radius:50px; -webkit-border-radius:23px; border-radius:23px;margin-bottom:0px&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding-right:12px&amp;quot; align=&amp;quot;center&amp;quot; valign=&amp;quot;middle&amp;quot;|&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DeltaWorlds&#039;&#039;&#039; , short &#039;&#039;DW&#039;&#039;, Home of the 3D Internet, the 3D virtual reality platform with an immersive experience - log in to explore 3D virtual environments that other users have built. Users  chat, talk and share or [[Building | build structures]] themselves from a selection of objects in private world or publicly owned land of the Public Free Universe.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The intuitive building system allows even the most inexperienced users to pick-up and begin building their own environments right away.&lt;br /&gt;
&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DW::Browser&#039;&#039;&#039;, [https://www.deltaworlds.com/downloads/ available for free download], also has [[URL | web browsing]] capabilities, voice chat, [[media | streaming media]] and instant messaging which allows users to connect, explore and [[Building | create]] more in-depth and interactive environments.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:DeltaWiki]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=File:Cloth01.jpg&amp;diff=237</id>
		<title>File:Cloth01.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=File:Cloth01.jpg&amp;diff=237"/>
		<updated>2026-02-09T14:52:02Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=File:Cloth02.jpg&amp;diff=236</id>
		<title>File:Cloth02.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=File:Cloth02.jpg&amp;diff=236"/>
		<updated>2026-02-09T14:51:26Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Cloth&amp;diff=235</id>
		<title>Cloth</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Cloth&amp;diff=235"/>
		<updated>2026-02-09T14:50:53Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{feature|1194|5.1}} Category:Building Category:5.1  The &amp;#039;&amp;#039;&amp;#039;cloth&amp;#039;&amp;#039;&amp;#039; object type allows for realistic cloth-based objects, like flags waving in the wind or making an deformable object. &amp;lt;br&amp;gt;  * Cloth is a quiete complex topic. Before starting to build, you may want to read at least the tips below. Simulating cloth can be a quite stressing task for your PC. Avoiding a few things and always attempting to build for best performance will help you to create fascinating...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{feature|1194|5.1}}&lt;br /&gt;
[[Category:Building]]&lt;br /&gt;
[[Category:5.1]]&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;cloth&#039;&#039;&#039; object type allows for realistic cloth-based objects, like flags waving in the wind or making an deformable object.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Cloth is a quiete complex topic. Before starting to build, you may want to read at least the tips below. Simulating cloth can be a quite stressing task for your PC. Avoiding a few things and always attempting to build for best performance will help you to create fascinating content in your world using cloth, fabric and deformable objects.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Note, only described features are currently supported. Some more features are already found with cloth properties, that are either greyed out or disabled for now.&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Basic Principles of Cloth==&lt;br /&gt;
&#039;&#039;(Source: NVIDIA® PhysX® SDK Documentation)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:cloth01.jpg|right|200 px|thumb|]]&lt;br /&gt;
The cloth feature of the NVIDIA® PhysX® SDK allows for simulation of items made from cloth, such as flags, clothing, etc. This is accomplished by providing a mesh that is used to define a set of particles (vertices). The topology of the mesh allows the SDK to construct constraints between the particles that mimic how cloth can bend and stretch. In addition, cloth particles can be pinned to shapes and global positions, such as attaching a flag to a pole.&lt;br /&gt;
 &lt;br /&gt;
[[Image:cloth02.jpg|left|200 px|thumb|]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
There are two main types of cloth constraints:&lt;br /&gt;
&lt;br /&gt;
* Stretching - applied to maintain distance between each particle that is connected by an edge in a cloth mesh. The strength of this constraint is assigned using the SDK; specifying a small stretching constraint factor allows the particles to move apart more easily and gives the impression of more stretchy cloth, such as lycra. Specifying a larger constraint factor makes the cloth stiffer, like denim. &lt;br /&gt;
&lt;br /&gt;
* Bending - applied to maintain the angle along an edge in a cloth mesh, either by constraining the angle directly or by constraining the distance between the pair of particles on either side of the edge (see the diagram below). An example of a material that would use a low bending constraint for simulation is cotton, while a substance such as paper or cardboard would use a high bending constraint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
==Cloth Attributes==&lt;br /&gt;
&#039;&#039;(in alphabetical order)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Attachment Response Coefficient===&lt;br /&gt;
&lt;br /&gt;
This coefficient controls the strength of the momentum transfer between a cloth and the shape(s) it is attached to. A large attachment response coefficient will cause the cloth to pull/push the body more easily and a lower value will mean the rigid body is more difficult to move.&lt;br /&gt;
&lt;br /&gt;
Defines a factor for the impulse transfer from cloth to attached rigid bodies. &lt;br /&gt;
Only has an effect if the attachment response is checkmarked and the cloth is attached to a rigid body.&lt;br /&gt;
&lt;br /&gt;
Default: 0.5 &lt;br /&gt;
Range: [0,1]&lt;br /&gt;
&lt;br /&gt;
===Attachment Tear Factor===&lt;br /&gt;
&lt;br /&gt;
If the Attachment Tearable is checkmarked, this variable defines the elongation factor that causes the attachment to tear. &lt;br /&gt;
&lt;br /&gt;
Must be larger than 1.&lt;br /&gt;
Only has an effect if the attachment tearable is checkmarked and the cloth is attached to a rigid body.&lt;br /&gt;
&lt;br /&gt;
Default: 1.0 &lt;br /&gt;
Range: [1,1000]&lt;br /&gt;
&lt;br /&gt;
===Bending Stiffness===&lt;br /&gt;
&lt;br /&gt;
Bending stiffness of the cloth in the range 0 to 1. &lt;br /&gt;
&lt;br /&gt;
Default: 1.0 &lt;br /&gt;
Range: [0,1]&lt;br /&gt;
&lt;br /&gt;
===Collision Response Coefficient===&lt;br /&gt;
&lt;br /&gt;
The collision response coefficient is similar to the attachment response coefficient, except instead of applying forces due to the attachment, it applies forces due to collision.&lt;br /&gt;
&lt;br /&gt;
Defines a factor for the impulse transfer from cloth to colliding rigid bodies. &lt;br /&gt;
Only has an effect if Collision Response is checkmarked.&lt;br /&gt;
&lt;br /&gt;
Default: 0.5 &lt;br /&gt;
Range: [0,1000]&lt;br /&gt;
&lt;br /&gt;
===Compression Limit===&lt;br /&gt;
&lt;br /&gt;
Defines a factor up to which the cloth is weak under compression. &lt;br /&gt;
This factor is the lower part of a range [limit, 1]. Whenever an edge is compressed to something between [limit, 1] * original length, the stretchingStiffness is multiplied with the compressionStiffness.&lt;br /&gt;
&lt;br /&gt;
Since the compressionStiffness is smaller or equal to 1, this will always define a range where the cloth reacts more softly to compressed edges.&lt;br /&gt;
This feature is useful to generate small wrinkles features on the cloth mesh outside the SDK.&lt;br /&gt;
&lt;br /&gt;
Default: 1.0 &lt;br /&gt;
Range: [0, 1]&lt;br /&gt;
&lt;br /&gt;
===Compression Stiffness===&lt;br /&gt;
&lt;br /&gt;
Defines the stiffness of the cloth under compression. &lt;br /&gt;
This stiffness scales the Stretching Stiffness in the range defined by Compression Limit.&lt;br /&gt;
&lt;br /&gt;
Default: 1.0 &lt;br /&gt;
Range: [0, 1]&lt;br /&gt;
&lt;br /&gt;
===Damping Coefficient===&lt;br /&gt;
&lt;br /&gt;
Controls how much damping is applied to the motion of cloth particles. Damping is always performed for the velocity of each individual particle. If Global Pos Damping is checkmarked, the global rigid body modes (translation and rotation) are exempted from damping. If not, the global translation and rotation of the cloth are damped, same as the internal movement of the cloth.&lt;br /&gt;
&lt;br /&gt;
Spring damping of the cloth in the range 0 to 1. &lt;br /&gt;
Useful to reduce CPU/GPU load, and for putting cloth asleep.&lt;br /&gt;
&lt;br /&gt;
Default: 0.1 &lt;br /&gt;
Range: [0,1]&lt;br /&gt;
&lt;br /&gt;
===Density===&lt;br /&gt;
&lt;br /&gt;
Density indirectly specifies the mass of the cloth particles. The mass of a particle is calculated as the sum of the following equation (for triangles sharing a point):&lt;br /&gt;
&lt;br /&gt;
1/3 * triangleArea * density &lt;br /&gt;
&lt;br /&gt;
Default: 1.0 &lt;br /&gt;
Range: [0,1000]&lt;br /&gt;
&lt;br /&gt;
===Friction===&lt;br /&gt;
&lt;br /&gt;
Friction coefficient in the range 0 to 1. &lt;br /&gt;
Defines the damping of the velocities of cloth particles that are in contact.&lt;br /&gt;
&lt;br /&gt;
Default: 0.5 &lt;br /&gt;
Range: [0,1]&lt;br /&gt;
&lt;br /&gt;
===Hard Stretch Limitation Factor===&lt;br /&gt;
&lt;br /&gt;
Defines the hard stretch elongation limit. &lt;br /&gt;
If Hard Strech Limit is checkmarked, the solver pulls vertices with a maxDistance greater zero towards vertices with maxDistance zero (attached). This reduces the stretchiness even for low solver iteration counts. The process is non-physical and can yield small ghost forces. The Hard Stretch Limitation Factor defines by what factor the cloth is allowed to stretch.&lt;br /&gt;
&lt;br /&gt;
Default: 1.0 &lt;br /&gt;
Range: [0,1000]&lt;br /&gt;
&lt;br /&gt;
===Min Adhere Velocity===&lt;br /&gt;
&lt;br /&gt;
If Enable Adhere is checkmarked, the cloth moves partially in the frame of the attached actor. &lt;br /&gt;
This feature is useful when the cloth is attached to a fast moving character. In that case the cloth adheres to the shape it is attached to while only velocities below the parameter Min Adhere Velocity are used for secondary effects.&lt;br /&gt;
&lt;br /&gt;
Default: 1.0&lt;br /&gt;
Range: [0,1000]&lt;br /&gt;
&lt;br /&gt;
===Pressure===&lt;br /&gt;
&lt;br /&gt;
If pressure is set to another value than 0, this variable defines the volume of air inside the mesh as volume = pressure * restVolume. &lt;br /&gt;
For pressure &amp;lt; 1 the mesh contracts w.r.t. the rest shape For pressure &amp;gt; 1 the mesh expands w.r.t. the rest shape&lt;br /&gt;
&lt;br /&gt;
Default: 0.0 &lt;br /&gt;
Range: [0,10]&lt;br /&gt;
&lt;br /&gt;
===Stretching Stiffness===&lt;br /&gt;
&lt;br /&gt;
Stretching stiffness defines the strength of the constraint along a triangle edge that maintains the distance between the edge end points. A value of one will produce a cloth that is very difficult to stretch, such as denim pants, while a value near zero will produce one that can stretch easily, like nylon stockings (a value too near zero is not recommended for a stable simulation; zero is not allowed).&lt;br /&gt;
&lt;br /&gt;
Stretching stiffness of the cloth in the range 0 to 1. &lt;br /&gt;
Note: stretching stiffness must be larger than 0.&lt;br /&gt;
&lt;br /&gt;
Default: 0.5 &lt;br /&gt;
Range: [0,1]&lt;br /&gt;
&lt;br /&gt;
===Tear Factor===&lt;br /&gt;
&lt;br /&gt;
If tearing is enabled, this variable defines the elongation factor that causes the cloth to tear. &lt;br /&gt;
Must be larger than 1. &lt;br /&gt;
&lt;br /&gt;
Default: 2.0 &lt;br /&gt;
Range: [1,1000]&lt;br /&gt;
&lt;br /&gt;
===Thickness===&lt;br /&gt;
&lt;br /&gt;
Thickness of the cloth. The thickness is usually a fraction of the overall extent of the cloth and should not be set to a value greater than that. A good value is the maximal distance between two adjacent cloth particles in their rest pose. Visual artifacts or collision problems may appear if the thickness is too small.&lt;br /&gt;
&lt;br /&gt;
Thickness defines the triangle&#039;s level of thickness for collision detection, improving its robustness. Setting the thickness very low is not recommended as this will lead to poor collision handling.&lt;br /&gt;
&lt;br /&gt;
Default: 0.5 &lt;br /&gt;
Range: [0,1]&lt;br /&gt;
&lt;br /&gt;
===Valid Bounds===&lt;br /&gt;
&lt;br /&gt;
By using valid bounds you can specify an axis-aligned bounding volume to which the cloth is restricted. Any part of the cloth that leaves this volume (such as pieces torn off an otherwise attached flag) will be removed from the simulation. &lt;br /&gt;
&lt;br /&gt;
If the bounds are set, this variable defines the volume outside of which cloth particle are automatically removed from the simulation. &lt;br /&gt;
The values for x, y, z each define a distance from the current position in world in positive and netagive directions.&lt;br /&gt;
&lt;br /&gt;
Default: 0&lt;br /&gt;
Range: [0,1000]&lt;br /&gt;
&lt;br /&gt;
===Wind===&lt;br /&gt;
&lt;br /&gt;
As with external acceleration this applies an acceleration on each vertex. However this acceleration is only applied in the vertex normal direction, i.e. only the component of the external force that lies in the direction of the vertex normal is applied to the vertex. This makes it easy to simulate effects such as wind.&lt;br /&gt;
&lt;br /&gt;
Wind is an acceleration (unit length / s^2) which acts normal to the cloth surface at each vertex. &lt;br /&gt;
&lt;br /&gt;
Default: (0,0,0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tips==&lt;br /&gt;
&lt;br /&gt;
===General tips (basic rules)===&lt;br /&gt;
&lt;br /&gt;
* Do not intersect cloth with static colliders. This causes odd behavior of the cloth and adds lots of CPU/GPU load (10 times more!) onto the PC.&lt;br /&gt;
* Look at the yellow bounding box of rigid body objects that you want to collide with cloth or any other rigid body. If the shape matches the size of the bounding box, use primitives like box, sphere or capsule. Do not use cylinder for static shapes. If the shape of the object does not match the bounding box, i.e. the bounding box is much bigger than the object&#039;s geometry, use a hull (convex mesh) for dynamic rigid bodies and tree (triangle mesh) for static rigid bodies.&lt;br /&gt;
* Models with very irregular order of triangles, as well models with many clumps (submeshes) will not work well for used for cloth objects.&lt;br /&gt;
* Geometry with less or equal 3 verticies, or less than 2 triangles will be rejected.&lt;br /&gt;
&lt;br /&gt;
===How to create stiff cloth===&lt;br /&gt;
&lt;br /&gt;
* Use fewer vertices (fewer vertices makes stiffer cloth). &lt;br /&gt;
* Use higher iteration counts (associated performance impact). &lt;br /&gt;
* Use Ortho Bendning mode (results in stiffer, more realistic cloth bending).&lt;br /&gt;
&lt;br /&gt;
===How to improve cloth performance===&lt;br /&gt;
&lt;br /&gt;
* Use fewer vertices, a lower resolution. &lt;br /&gt;
* Use simple bending constraints (Bending Stiffness only and not Ortho Bending). &lt;br /&gt;
* Disable cloths that are not relevant using Static (checkmark static). &lt;br /&gt;
* Disable tearing for cloths which do not need tearing (uncheck tearing). &lt;br /&gt;
* Avoid cloth self collision (uncheck Selfcollision).&lt;br /&gt;
* Avoid cloth intersecting with static colliders.&lt;br /&gt;
&lt;br /&gt;
===How to use pressure===&lt;br /&gt;
&lt;br /&gt;
* If the pressure is set to a value less than 1.0 (the default), the pressure will be insufficient to preserve the initial shape of the cloth and it will collapse until it has been compressed enough to have an internal pressure of 1.0. &lt;br /&gt;
* If the pressure is set to a value greater than 1.0, the cloth will expand beyond its initial size; how much will depend on the stretching stiffness of the cloth.&lt;br /&gt;
* Pressure only works well on closed geometries. If pressure is applied to flat panels or objects like trees, you may experience unexpected events.&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Reset&amp;diff=234</id>
		<title>Reset</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Reset&amp;diff=234"/>
		<updated>2026-02-09T14:50:02Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{TOCright}} {{feature|1255|5.2}} ==Usage==  &amp;#039;&amp;#039;&amp;#039;reset&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;physics&amp;#039;&amp;#039; [name=&amp;#039;&amp;#039;name&amp;#039;&amp;#039;] [&amp;#039;&amp;#039;global&amp;#039;&amp;#039;]  The &amp;#039;&amp;#039;&amp;#039;reset&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;physics&amp;#039;&amp;#039; statement resets all physical objects including cloth-objects of the same builder within visible range.  ===name=== The &amp;#039;&amp;#039;name&amp;#039;&amp;#039; optionally specifies objects of the given name to be reset.  ===global=== A command with the &amp;#039;&amp;#039;global&amp;#039;&amp;#039; argument appended will cause the triggered command to be sent to all neighbors in view, if enabled with the wor...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
{{feature|1255|5.2}}&lt;br /&gt;
==Usage==&lt;br /&gt;
 &#039;&#039;&#039;reset&#039;&#039;&#039; &#039;&#039;physics&#039;&#039; [name=&#039;&#039;name&#039;&#039;] [&#039;&#039;global&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;reset&#039;&#039;&#039; &#039;&#039;physics&#039;&#039; statement resets all physical objects including cloth-objects of the same builder within visible range.&lt;br /&gt;
&lt;br /&gt;
===name===&lt;br /&gt;
The &#039;&#039;[[name]]&#039;&#039; optionally specifies objects of the given name to be reset.&lt;br /&gt;
&lt;br /&gt;
===global===&lt;br /&gt;
A command with the &#039;&#039;global&#039;&#039; argument appended will cause the triggered command to be sent to all neighbors in view, if enabled with the world feature settings.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
* This command has no effect when used with &#039;&#039;create&#039;&#039;, &#039;&#039;adone&#039;&#039; or similar triggers.&lt;br /&gt;
* The command can not be used to reset another builder&#039;s physics scene.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Physics]]&lt;br /&gt;
&lt;br /&gt;
{{Build}}&lt;br /&gt;
[[Category:Building commands]]&lt;br /&gt;
[[Category:Physics]]&lt;br /&gt;
[[Category:5.2]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Name&amp;diff=233</id>
		<title>Name</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Name&amp;diff=233"/>
		<updated>2026-02-09T14:49:23Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{feature|N/A|N/A}} The &amp;#039;&amp;#039;&amp;#039;name&amp;#039;&amp;#039;&amp;#039; command assigns a name to an object so that it may be referenced by an action on another object. This allows the implementation of multi-object behaviors. For example, clicking an object can cause another object to appear or disappear.  ==Usage==  &amp;#039;&amp;#039;&amp;#039;name&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;name&amp;#039;&amp;#039;  ===name=== The &amp;#039;&amp;#039;name&amp;#039;&amp;#039; argument is the only argument required for this command. Names are limited to 15 characters and can only contain alphanumeric and underscore charac...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{feature|N/A|N/A}}&lt;br /&gt;
The &#039;&#039;&#039;name&#039;&#039;&#039; command assigns a name to an object so that it may be referenced by an action on another object. This allows the implementation of multi-object behaviors. For example, clicking an object can cause another object to appear or disappear.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
 &#039;&#039;&#039;name&#039;&#039;&#039; &#039;&#039;name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===name===&lt;br /&gt;
The &#039;&#039;name&#039;&#039; argument is the only argument required for this command. Names are limited to 15 characters and can only contain alphanumeric and underscore characters.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
 Object #1:&lt;br /&gt;
 create name door&lt;br /&gt;
 Object #2:&lt;br /&gt;
 [[bump]] [[visible]] door off&lt;br /&gt;
Creates an object with the name &#039;&#039;door&#039;&#039;. This name is referrable by other objects, such as the second object which hides the named object on bump. &lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
* Multiple objects may have the same name. In this case, any actions applied to a given name will affect all objects within visibility range with that name assigned to them.&lt;br /&gt;
* Named objects can only be affected by objects owned by the same citizen or by other tourists.&lt;br /&gt;
&lt;br /&gt;
{{Build}}&lt;br /&gt;
[[Category:Building commands]]&lt;br /&gt;
[[nl:Commando:Name]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Say&amp;diff=232</id>
		<title>Say</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Say&amp;diff=232"/>
		<updated>2026-02-09T14:48:45Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{feature|1018|4.2}} The Say command in action. The text printed by the command is shown in baby blue, italic lettering.  The &amp;#039;&amp;#039;&amp;#039;say&amp;#039;&amp;#039;&amp;#039; command allows a line of text to be printed to the Activeworlds chat window.  ==Usage==  &amp;#039;&amp;#039;&amp;#039;say&amp;#039;&amp;#039;&amp;#039; [text=]&amp;#039;&amp;#039;text&amp;#039;&amp;#039;  ===text=== A string value to print into the browser&amp;#039;s chat log.  ==Examples==  activate say &amp;quot;Welcome to Ground Zero!&amp;quot; When the user clicks the object, the text...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{feature|1018|4.2}}&lt;br /&gt;
[[Image:Say1.jpg|300px|thumb|The Say command in action. The text printed by the command is shown in baby blue, italic lettering.]]&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;say&#039;&#039;&#039; command allows a line of text to be printed to the Activeworlds chat window.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
 &#039;&#039;&#039;say&#039;&#039;&#039; [text=]&#039;&#039;text&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===text===&lt;br /&gt;
A [[Object scripting#String|string]] value to print into the browser&#039;s chat log.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
 [[activate]] say &amp;quot;Welcome to Ground Zero!&amp;quot;&lt;br /&gt;
When the user clicks the object, the text Welcome to Ground Zero! will be printed in the chat window.&lt;br /&gt;
&lt;br /&gt;
{{Build}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Building commands]]&lt;br /&gt;
[[Category:4.2]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=File:AWR_cabin_windball.png&amp;diff=231</id>
		<title>File:AWR cabin windball.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=File:AWR_cabin_windball.png&amp;diff=231"/>
		<updated>2026-02-09T14:47:00Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=File:AWR_cabin_wind.jpg&amp;diff=230</id>
		<title>File:AWR cabin wind.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=File:AWR_cabin_wind.jpg&amp;diff=230"/>
		<updated>2026-02-09T14:46:38Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=File:Zarco_entropy.png&amp;diff=229</id>
		<title>File:Zarco entropy.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=File:Zarco_entropy.png&amp;diff=229"/>
		<updated>2026-02-09T14:46:23Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=File:Zarco_chamber.png&amp;diff=228</id>
		<title>File:Zarco chamber.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=File:Zarco_chamber.png&amp;diff=228"/>
		<updated>2026-02-09T14:46:10Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=File:Zarco.png&amp;diff=227</id>
		<title>File:Zarco.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=File:Zarco.png&amp;diff=227"/>
		<updated>2026-02-09T14:45:11Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Guide:Physics_tricks&amp;diff=226</id>
		<title>Guide:Physics tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Guide:Physics_tricks&amp;diff=226"/>
		<updated>2026-02-09T14:44:39Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;Physics can be used for two techniques to enhance interactivity; a [http://en.wikipedia.org/wiki/Random random] generator and to simulate wind dynamics.  == Random generator == For this tutorial, I will be making use of a recent creation: Zarco, the coin-operated boy wonder. His function is to provide fortunes to visitors. As the browser does not contain a random command, I use physics (and juju) to randomly decide the fortune. This can be used to pick fortunes,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Physics]] can be used for two techniques to enhance interactivity; a [http://en.wikipedia.org/wiki/Random random] generator and to simulate wind dynamics.&lt;br /&gt;
&lt;br /&gt;
== Random generator ==&lt;br /&gt;
For this tutorial, I will be making use of a recent creation: Zarco, the coin-operated boy wonder. His function is to provide fortunes to visitors. As the [[browser]] does not contain a random command, I use physics (and juju) to randomly decide the fortune. This can be used to pick fortunes, numbers, names or any values and actions you desire (e.g. randomly decided traps)&lt;br /&gt;
&lt;br /&gt;
=== Basic operation ===&lt;br /&gt;
[[Image:Zarco.png|frame|center|Zarco in his cabinet, giving out wise directions. Watch him operate on [http://www.youtube.com/watch?v=uEl6hEtfv-k YouTube]]]&lt;br /&gt;
Zarco is triggered by a button, which sets of a chain of animate commands. These commands cause a physical ball to spin around in an enclosure of panels with the [[collide]] panel. The ball is then given a &amp;quot;local axis&amp;quot; (ltm) force, pushing it toward a panel. The collided panel then gives its fortune. There are 24 possible fortunes that Zarco may give at any time.&lt;br /&gt;
&lt;br /&gt;
=== Setting up the &amp;quot;picker&amp;quot; ===&lt;br /&gt;
A random fortune is given by a spinning &amp;lt;code&amp;gt;nograv&amp;lt;/code&amp;gt; ball enclosed in a chamber. First, create the &amp;quot;picker&amp;quot; ball using a small object such as &amp;quot;p1sph0005&amp;quot; (Note: Despite the fact that this object has a bottom-center axis, the physics engine correctly sets its axis to the mesh&#039;s center). Give it the following code:&lt;br /&gt;
&lt;br /&gt;
 [[create]]&lt;br /&gt;
   [[name]] rand,&lt;br /&gt;
   [[colltag]] 10,&lt;br /&gt;
   [[collider]] nograv;&lt;br /&gt;
 [[collide]]&lt;br /&gt;
   [[reset]] physics,&lt;br /&gt;
   [[addtorque]] 250 20 59&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;create&amp;lt;/code&amp;gt; trigger sets properties for the ball:&lt;br /&gt;
* Its name is &amp;quot;rand&amp;quot;, which will allow other objects to modify it&lt;br /&gt;
* Its &amp;quot;colltag&amp;quot; is 10; this will be used to allow collision events between it and the fortune panels&lt;br /&gt;
* &amp;quot;collider&amp;quot; makes it a physics object. The &amp;quot;nograv&amp;quot; attribute is &#039;&#039;&#039;important&#039;&#039;&#039; as it makes it float instead of falling.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;collider&amp;lt;/code&amp;gt; trigger causes the ball to:&lt;br /&gt;
* &amp;quot;reset physics&amp;quot;; when the ball collides with a fortune panel, it will return to its original position&lt;br /&gt;
* &amp;quot;addtorque&amp;quot;; this causes the ball to spin wildly after resetting. This gives it some &amp;quot;randomness&amp;quot; to the next choice.&lt;br /&gt;
&lt;br /&gt;
=== Setting up the &amp;quot;fortune panels&amp;quot; ===&lt;br /&gt;
[[Image:Zarco chamber.png|frame|center|Zarco&#039;s random chamber; this is where the &amp;quot;picker&amp;quot; ball is kept. Watch the picker in action on [http://www.youtube.com/watch?v=OaoBC_tjd0w YouTube]]]&lt;br /&gt;
Surrounding the ball is the chamber, which is made up of small panels. In Zarco&#039;s case, this chamber is a cube consisting of four panels on each side (using the &amp;quot;a&amp;quot; [[object]] to reduce [[cell space]]). All sides must be enclosed to prevent the ball from flying off into the unknown. Each panel should contain the following code:&lt;br /&gt;
&lt;br /&gt;
 [[create]]&lt;br /&gt;
   [[collider]] static,&lt;br /&gt;
   [[colltag]] 10;&lt;br /&gt;
 [[collide]]&lt;br /&gt;
   [[say]] &amp;quot;Zarco:  &amp;lt;MESSAGE&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;create&amp;lt;/code&amp;gt; trigger sets properties for the panel:&lt;br /&gt;
* &amp;quot;collider&amp;quot; makes it a physics object. The &amp;quot;static&amp;quot; attribute is &#039;&#039;&#039;important&#039;&#039;&#039; as it makes the panel unmovable.&lt;br /&gt;
* Its &amp;quot;colltag&amp;quot; is 10; this will be used to allow collision events between it and the picker ball&lt;br /&gt;
&lt;br /&gt;
At this point, the code after the &amp;lt;code&amp;gt;collider&amp;lt;/code&amp;gt; trigger is up to you; you can make an object nearby [[move]], play a [[sound]], start a [[media]], anything. In Zarco&#039;s case, all panels use the same command:&lt;br /&gt;
* &amp;quot;say&amp;quot; causes the object to say something in chat. In this case, all messages start with &amp;quot;Zarco:  &amp;quot; with an invisible tab character between his name and the message; this makes him look like a nearby person. Example fortunes that Zarco say are:&lt;br /&gt;
** &amp;lt;code&amp;gt;collide say &amp;quot;Zarco:  Probably.&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;collide say &amp;quot;Zarco:  Reception is fuzzy; ask again later&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;collide say &amp;quot;Zarco:  Keep taking left turns and you will find out&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setting up this button ===&lt;br /&gt;
To invoke the randomizer and spit out a random fortune, a button (or bump panel) is required. Zarco&#039;s button uses a complex [[astart]] mechanism, but I will explain a more simple method. With this code, a second or two after the button is clicked, a random action should be performed. Create a button with the following code:&lt;br /&gt;
&lt;br /&gt;
 [[activate]]&lt;br /&gt;
   [[addtorque]] 9 -7 8 name=rand,&lt;br /&gt;
   [[addforce]] 5 3 1 ltm name=rand;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; trigger causes the button to do the following when clicked:&lt;br /&gt;
* &amp;quot;addtorque&amp;quot; causes the picker ball to spin. The numbers are not significant; you should change these to random values. This is the fundamental &amp;quot;random&amp;quot; functionality.&lt;br /&gt;
* &amp;quot;addforce&amp;quot; is what causes the ball to move into a fortune panel, eventually colliding with it.&lt;br /&gt;
&lt;br /&gt;
=== Entropy and why Zarco is not actually random ===&lt;br /&gt;
This trick will never be truly random; this and other random generation techniques used by computers are always &amp;quot;psuedo-random&amp;quot;. Especially with the technique in this tutorial, it can be predictable. For example, Zarco&#039;s first fortune would always be &amp;quot;Oh... I&#039;ve been meaning to ask you about that...&amp;quot;. This is because (using the above code example) Zarco will always start with a spin of &amp;quot;9 -7 8&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
To make Zarco more random, something called &amp;quot;entropy&amp;quot; needs to be added. Entropy is what makes real-world random number generators more &amp;quot;random&amp;quot;; this entropy can be readings from the atmosphere, monitoring static on radio waves or even monitoring cosmic background radiation. While Active Worlds does not yet have the ability to read from cosmic background radiation, it is still possible to add &amp;quot;entropy&amp;quot; to the randomizer.&lt;br /&gt;
&lt;br /&gt;
[[Image:Zarco entropy.png|frame|center|A floorboard that provides entropy to the randomizer for those who approach Zarco.]]&lt;br /&gt;
&lt;br /&gt;
To do this, I have added &amp;quot;bump&amp;quot; triggers on floor objects around Zarco that &amp;lt;sup&amp;gt;addtorque&amp;lt;/sup&amp;gt; to the picker ball. For example, this code is on the wooden floorboards in front of Zarco:&lt;br /&gt;
&lt;br /&gt;
 [[bump]] [[addtorque]] 10 2 18 name=rand global&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;bump&amp;lt;/code&amp;gt; trigger causes the random picker ball to spin around when the floor is walked on. Again, these numbers are insignificant; you should change them to different numbers for each bump trigger. An &#039;&#039;&#039;important&#039;&#039;&#039; attribute of this command is &amp;quot;global&amp;quot;; this causes the ball to spin for others nearby, giving them additional entropy.&lt;br /&gt;
&lt;br /&gt;
This way, when a visitor approaches Zarco, he ideally should get a different first answer than others. Other triggers can be combined too, such as [[enter zone]] or VRT timers using the [[at]] trigger to provide entropy every minute.&lt;br /&gt;
&lt;br /&gt;
=== Error handling ===&lt;br /&gt;
One problem with this trick is that it requires physics. This can present a problem when visitors have physics disabled; triggering Zarco would make nothing happen (or in the AWReunion version&#039;s case, it simply says &amp;quot;Zarco whirrs to life in his machine...&amp;quot;). To prevent confusion, error handling should be implemented. Change the button code to the following:&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;Note: Although I use a legacy animate timer here, you can also use the [[timer]] command and [[at]]. Personal experience has shown me that [[timer]] is an unpredictable command, however. YMMV.&#039;&#039;&lt;br /&gt;
 [[create]]&lt;br /&gt;
   [[name]] zerror,&lt;br /&gt;
   [[animate]] me . 1 1 5000;&lt;br /&gt;
 [[activate]]&lt;br /&gt;
   [[addtorque]] 9 -7 8 name=rand,&lt;br /&gt;
   [[addforce]] 5 3 1 ltm name=rand,&lt;br /&gt;
   [[astart]];&lt;br /&gt;
 [[adone]]&lt;br /&gt;
   [[say]] &amp;quot;Zarco is unable to answer as he requires physics to be enabled&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;create&amp;lt;/code&amp;gt; trigger sets properties for the button:&lt;br /&gt;
* Its name is &amp;quot;zerror&amp;quot;, which will allow the random picker to stop the &amp;quot;error timer&amp;quot;&lt;br /&gt;
* The animate command gives it a time out of 5000 milliseconds (5 seconds); this should be more than the time it takes for the picker ball to pick a fortune.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; trigger causes a new thing to happen when clicked: It starts the five second &amp;quot;animate&amp;quot; timer. Then, the &amp;lt;code&amp;gt;adone&amp;lt;/code&amp;gt; trigger causes Zarco to say a helpful error message when the five seconds are up.&lt;br /&gt;
&lt;br /&gt;
Now to make the picker ball report its success upon picking a fortune, change its code to the following:&lt;br /&gt;
&lt;br /&gt;
 [[create]]&lt;br /&gt;
   [[name]] rand,&lt;br /&gt;
   [[colltag]] 10,&lt;br /&gt;
   [[collider]] nograv;&lt;br /&gt;
 [[collide]]&lt;br /&gt;
   [[reset]] physics,&lt;br /&gt;
   [[addtorque]] 250 20 59,&lt;br /&gt;
   [[astop]] zerror&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;collide&amp;lt;/code&amp;gt; trigger now contains the command &amp;quot;astop zerror&amp;quot;. What this does is it stops the button&#039;s five second timer upon colliding with a fortune panel, preventing the error showing up as clearly, the physics engine is enabled for that particular user.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
* Be careful introducing [[zone]]s with unusual gravity settings such as 0 or negative values; this can cause the randomizer to spam fortunes in chat or break it.&lt;br /&gt;
* Although virtually you can surround the ball with as many panels as possible, it is not recommended. The physics engine has a low resolution; the smaller the panels, the more likely the picker will trigger more than 1 fortune at a time.&lt;br /&gt;
* Do not add the &amp;quot;global&amp;quot; attribute to the button; as physics is not global, people near Zarco will see different fortunes to others.&lt;br /&gt;
&lt;br /&gt;
== Simulating wind dynamics ==&lt;br /&gt;
Although [[cloth]] supports wind paramters, this is not controllable by commands. Using this trick, it is possible to make an environment feel more alive and reactive to the atmosphere. I use this in the [[AWReunion (world)]] welcome cabin to make the foyer&#039;s banner get blown away by the harsh outdoor winter winds.&lt;br /&gt;
&lt;br /&gt;
[[Image:AWR cabin wind.jpg|frame|center|Opening the front doors causes the harsh winter winds to blow inside, affecting the cloth banner. Watch on [http://www.youtube.com/watch?v=XrX_Gq9xPv8 YouTube]]]&lt;br /&gt;
&lt;br /&gt;
=== Basic operation ===&lt;br /&gt;
This trick makes use of an invisible physical ball, a looping [[animate]] timer and another time-out timer. The invisible ball is parked in front of the cloth (front toward the source of the wind). When triggered, the repeating looping timer repeatedly resets and throws the ball into the cloth banner, making it look like buffers of incoming wind. Eventually, this loop is stopped when the door is closed by using another timer.&lt;br /&gt;
&lt;br /&gt;
=== Setting up the &amp;quot;wind ball&amp;quot; ===&lt;br /&gt;
[[Image:AWR cabin windball.png|frame|center|The &amp;quot;wind&amp;quot; ball exposed; cloth is invisible whilst in build mode.]]&lt;br /&gt;
Create a ball object (such as p1sph0100) in front of the cloth or physical object you wish to apply wind to. Apply it relatively high to the cloth&#039;s center point. Rotate it so that its &#039;&#039;&#039;X&#039;&#039;&#039; axis is facing the cloth. Add the following code to the ball:&lt;br /&gt;
&lt;br /&gt;
 [[create]]&lt;br /&gt;
   [[name]] wind,&lt;br /&gt;
   [[animate]] me . 1 1 1000,&lt;br /&gt;
   [[visible]] no, [[solid]] no;&lt;br /&gt;
 [[adone]]&lt;br /&gt;
   [[reset]] physics name=wind,&lt;br /&gt;
   [[addforce]] 25 ltm,&lt;br /&gt;
   [[astart]]&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;create&amp;lt;/code&amp;gt; trigger sets properties for the ball:&lt;br /&gt;
* Its name is &amp;quot;wind&amp;quot;, which will allow other objects to trigger its timer&lt;br /&gt;
* It is given a timer of 1000 milliseconds (one second) using the legacy animate command&lt;br /&gt;
* It is made invisible and non-collidable by users (this will not affect physics)&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;adone&amp;lt;/code&amp;gt; trigger causes the following to happen when the ball&#039;s one second timer is triggered:&lt;br /&gt;
* The physics are reset for the ball, causing it to move back into original position&lt;br /&gt;
* It is pushed into the cloth (assuming its X axis is toward the cloth) using the &amp;quot;addforce&amp;quot; command&lt;br /&gt;
* &amp;quot;astart&amp;quot; triggers this timer again after one second; this causes a loop&lt;br /&gt;
&lt;br /&gt;
=== Setting up the door and &amp;quot;time out&amp;quot; ===&lt;br /&gt;
For this tutorial, I will explain how to trigger the &amp;quot;wind&amp;quot; using a door. However this can be applied to any event, such as falling rocks exposing an opening. Create a door that is ideally facing the cloth with the ball in between. Add the following code:&lt;br /&gt;
&lt;br /&gt;
 [[create]]&lt;br /&gt;
   [[animate]] me . 1 1 10000;&lt;br /&gt;
 [[activate]]&lt;br /&gt;
   [[rotate]] -10 time=2 smooth wait=8,&lt;br /&gt;
   [[collider]] name=wind,&lt;br /&gt;
   [[astart]] wind,&lt;br /&gt;
   [[astart]];&lt;br /&gt;
 [[adone]]&lt;br /&gt;
   [[astop]] wind,&lt;br /&gt;
   [[collider]] static name=wind&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;create&amp;lt;/code&amp;gt; trigger gives the door a timer of 10000 milliseconds (ten seconds) that will be used to end the wind&#039;s timer loop. This time is chosen to coincide with the door&#039;s eight second rotate command.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;activate&amp;lt;/code&amp;gt; trigger causes the following to happen when the door is clicked:&lt;br /&gt;
* The door opens and holds its position for eight seconds&lt;br /&gt;
* The wind ball is made a physical object&lt;br /&gt;
* The wind ball&#039;s one second looping timer is started, making it throw itself into the cloth every second&lt;br /&gt;
* The door&#039;s own ten second timer is started&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;adone&amp;lt;/code&amp;gt; trigger causes the following to happen when the door&#039;s ten second timer is triggered:&lt;br /&gt;
* The wind ball&#039;s repeating one second timer is stopped&lt;br /&gt;
* The ball is made a static object, to prevent lag&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides|P]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Category:Guides&amp;diff=225</id>
		<title>Category:Guides</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Category:Guides&amp;diff=225"/>
		<updated>2026-02-09T14:42:13Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;A &amp;#039;&amp;#039;&amp;#039;guide&amp;#039;&amp;#039;&amp;#039; is a special type of page on the DeltaWiki that is written with the intent to be a personable guide of instruction regarding a particular niche of Delta Worlds. Guides are generally allowed to be much looser than standard articles, enabling the writer to engage readers personally and connect with them better for instructional purposes.  Category:DeltaWiki&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;guide&#039;&#039;&#039; is a special type of page on the DeltaWiki that is written with the intent to be a personable guide of instruction regarding a particular niche of Delta Worlds. Guides are generally allowed to be much looser than standard articles, enabling the writer to engage readers personally and connect with them better for instructional purposes.&lt;br /&gt;
&lt;br /&gt;
[[Category:DeltaWiki]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Guide:INI_Enhancements&amp;diff=224</id>
		<title>Guide:INI Enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Guide:INI_Enhancements&amp;diff=224"/>
		<updated>2026-02-09T14:40:40Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;INI Enhancements are additions you can make to the &#039;&#039;&#039;dworld.ini&#039;&#039;&#039; file in the &#039;&#039;&#039;DeltaWorlds (ex C:\DeltaWorlds)&#039;&#039;&#039; program folder to expand the functionality of certain features of the browser.  To add these enhancements to the browser, copy the text and paste it under the appropriate subsection in the .ini file.  If the subsection text does not exist in your .ini file, copy it and paste it into the end of the file.&lt;br /&gt;
&lt;br /&gt;
==Geometric Settings==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Geometry]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039;&lt;br /&gt;
ambient_mul=1.0&amp;lt;br&amp;gt;&lt;br /&gt;
diffuse_mul=1.0&amp;lt;br&amp;gt;&lt;br /&gt;
ambient_min=0.0&amp;lt;br&amp;gt;&lt;br /&gt;
diffuse_min=0.0&amp;lt;br&amp;gt;&lt;br /&gt;
bump_coef=1.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; These settings show the default values.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The *_mul values are a multiplier to the settings read from the geometry file, independent of its format. The values&#039; range is from 0.1 to 3.0.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The *_min values are the lower limits for the settings read from the geometry file, independent of its format. The values&#039; range is from 0.0 to 1.0.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The values for bump_coef can be used as a multiplier for the intensity of bumpmaps defined within RWX scripts (Texture &amp;lt;tname&amp;gt; bump &amp;lt;bname&amp;gt;). The values&#039; range is from 0.1 to 10.0.  &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A useful setting for increasing texture contrast and reactivity to light is:&amp;lt;br&amp;gt;&lt;br /&gt;
[geometry]&amp;lt;br&amp;gt;&lt;br /&gt;
diffuse_mul=2.0&amp;lt;br&amp;gt;&lt;br /&gt;
ambient_mul=0.75&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cull Mode==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Performance]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039; cull_mode=#&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Cull mode allows one to choose how the browser culls back faces.  Replace the # with the appropriate number.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;cull_mode=1:&#039;&#039; Do not cull back faces.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;cull_mode=2:&#039;&#039; Browser and RenderWare default.  Culls faces with clockwise vertices.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;cull_mode=3:&#039;&#039; Culls faces with counterclockwise vertices.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fill Mode==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Performance]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039; fill_mode=#&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Fill mode allows one to choose between render states.  Replace the # with the appropriate number.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fill_mode=1:&#039;&#039; Point Cloud, rendering vertices only.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;fill_mode=2:&#039;&#039; Wireframe, rendering connecting lines between verticies.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;fill_mode=3:&#039;&#039; Browser Default, the normal view. It&#039;s the same as setting it to 0 or leaving it undefined.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Object Selection Increase==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Special]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039; max_pick_count=1024&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; This value overrides the number of objects a user can select at once.  The default browser setting is 128.  The maximum amount of objects this override allows is 1024.&lt;br /&gt;
&lt;br /&gt;
==Visibility Fixed Range Limit==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Visible]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039; range_limit_fixed=#&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; This limit will append ranges in 10 meter steps to the Visibility Menu, up to the range limit &#039;&#039;you&#039;&#039; choose.  Note that the browser will only render objects beyond 200 meters if they have already been downloaded and cached.  Possible values are in increments of 10 between 200 and 500.  Replace the # with the appropriate number. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Warning!&#039;&#039; To take advantage of this feature, you need a strong computer, a good graphics card and a lot of dedicated video memory. With today&#039;s common use of textures and pictures, the hardware hits the limits easier than some years ago.&lt;br /&gt;
&lt;br /&gt;
==Visibility Floating Range Limit==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Visible]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039; range_limit_float=#&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; This limit for the floating visible range is used when &#039;Float&#039; has been selected from the Visibility Menu.  Note that the browser will only render objects beyond 200 meters if they have already been downloaded and cached.  Possible values are in increments of 10 between 200 and 500.  Replace the # with the appropriate number. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Warning!&#039;&#039; To take advantage of this feature, you need a strong computer, a good graphics card and a lot of dedicated video memory. With today&#039;s common use of textures and pictures, the hardware hits the limits easier than some years ago.&lt;br /&gt;
&lt;br /&gt;
[[Category:Browser]]&lt;br /&gt;
[[Category:Guides|I]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Guide:INI_Enhancements&amp;diff=223</id>
		<title>Guide:INI Enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Guide:INI_Enhancements&amp;diff=223"/>
		<updated>2026-02-09T14:40:04Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;INI Enhancements are additions you can make to the dworld.ini file in the DeltaWorlds program folder to expand the functionality of certain features of the browser.  To add these enhancements to the browser, copy the text and paste it under the appropriate subsection in the .ini file.  If the subsection text does not exist in your .ini file, copy it and paste it into the end of the file.  ==Geometric Settings== &amp;#039;&amp;#039;&amp;#039;Subsection:&amp;#039;&amp;#039;&amp;#039; [Geometry]  &amp;#039;&amp;#039;&amp;#039;Text:&amp;#039;&amp;#039;&amp;#039; ambient_mul=1.0&amp;lt;br...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;INI Enhancements are additions you can make to the dworld.ini file in the DeltaWorlds program folder to expand the functionality of certain features of the browser.  To add these enhancements to the browser, copy the text and paste it under the appropriate subsection in the .ini file.  If the subsection text does not exist in your .ini file, copy it and paste it into the end of the file.&lt;br /&gt;
&lt;br /&gt;
==Geometric Settings==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Geometry]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039;&lt;br /&gt;
ambient_mul=1.0&amp;lt;br&amp;gt;&lt;br /&gt;
diffuse_mul=1.0&amp;lt;br&amp;gt;&lt;br /&gt;
ambient_min=0.0&amp;lt;br&amp;gt;&lt;br /&gt;
diffuse_min=0.0&amp;lt;br&amp;gt;&lt;br /&gt;
bump_coef=1.0&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; These settings show the default values.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The *_mul values are a multiplier to the settings read from the geometry file, independent of its format. The values&#039; range is from 0.1 to 3.0.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The *_min values are the lower limits for the settings read from the geometry file, independent of its format. The values&#039; range is from 0.0 to 1.0.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The values for bump_coef can be used as a multiplier for the intensity of bumpmaps defined within RWX scripts (Texture &amp;lt;tname&amp;gt; bump &amp;lt;bname&amp;gt;). The values&#039; range is from 0.1 to 10.0.  &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A useful setting for increasing texture contrast and reactivity to light is:&amp;lt;br&amp;gt;&lt;br /&gt;
[geometry]&amp;lt;br&amp;gt;&lt;br /&gt;
diffuse_mul=2.0&amp;lt;br&amp;gt;&lt;br /&gt;
ambient_mul=0.75&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cull Mode==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Performance]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039; cull_mode=#&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Cull mode allows one to choose how the browser culls back faces.  Replace the # with the appropriate number.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;cull_mode=1:&#039;&#039; Do not cull back faces.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;cull_mode=2:&#039;&#039; Browser and RenderWare default.  Culls faces with clockwise vertices.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;cull_mode=3:&#039;&#039; Culls faces with counterclockwise vertices.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fill Mode==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Performance]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039; fill_mode=#&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; Fill mode allows one to choose between render states.  Replace the # with the appropriate number.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;fill_mode=1:&#039;&#039; Point Cloud, rendering vertices only.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;fill_mode=2:&#039;&#039; Wireframe, rendering connecting lines between verticies.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;fill_mode=3:&#039;&#039; Browser Default, the normal view. It&#039;s the same as setting it to 0 or leaving it undefined.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Object Selection Increase==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Special]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039; max_pick_count=1024&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; This value overrides the number of objects a user can select at once.  The default browser setting is 128.  The maximum amount of objects this override allows is 1024.&lt;br /&gt;
&lt;br /&gt;
==Visibility Fixed Range Limit==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Visible]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039; range_limit_fixed=#&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; This limit will append ranges in 10 meter steps to the Visibility Menu, up to the range limit &#039;&#039;you&#039;&#039; choose.  Note that the browser will only render objects beyond 200 meters if they have already been downloaded and cached.  Possible values are in increments of 10 between 200 and 500.  Replace the # with the appropriate number. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Warning!&#039;&#039; To take advantage of this feature, you need a strong computer, a good graphics card and a lot of dedicated video memory. With today&#039;s common use of textures and pictures, the hardware hits the limits easier than some years ago.&lt;br /&gt;
&lt;br /&gt;
==Visibility Floating Range Limit==&lt;br /&gt;
&#039;&#039;&#039;Subsection:&#039;&#039;&#039; [Visible]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Text:&#039;&#039;&#039; range_limit_float=#&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Description:&#039;&#039;&#039; This limit for the floating visible range is used when &#039;Float&#039; has been selected from the Visibility Menu.  Note that the browser will only render objects beyond 200 meters if they have already been downloaded and cached.  Possible values are in increments of 10 between 200 and 500.  Replace the # with the appropriate number. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Warning!&#039;&#039; To take advantage of this feature, you need a strong computer, a good graphics card and a lot of dedicated video memory. With today&#039;s common use of textures and pictures, the hardware hits the limits easier than some years ago.&lt;br /&gt;
&lt;br /&gt;
[[Category:Browser]]&lt;br /&gt;
[[Category:Guides|I]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Browser_interface&amp;diff=220</id>
		<title>Browser interface</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Browser_interface&amp;diff=220"/>
		<updated>2026-01-10T06:47:09Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;The UI is can be configured in any arrangement with floating/docking windows. There are various themes and toolbars that may be used with the software to provide further options.  == Main / 3D window == The 3D window, or the main window may run in windowed or fullscreen mode. There are various camera modes available with the ability to zoom in/out.  ===Avatars=== A user&amp;#039;s avatar is the representation of them within that environ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The UI is can be configured in any arrangement with [[floating]]/[[docking]] windows. There are various [[themes]] and [[toolbars]] that may be used with the software to provide further options.&lt;br /&gt;
&lt;br /&gt;
== Main / 3D window ==&lt;br /&gt;
The 3D window, or the main window may run in windowed or fullscreen mode. There are various [[user camera|camera]] modes available with the ability to zoom in/out.&lt;br /&gt;
&lt;br /&gt;
===Avatars===&lt;br /&gt;
A user&#039;s [[Avatars|avatar]] is the representation of them within that environment.  Tourists have access to two avatars, typically male / female.  Citizens have the world&#039;s full selection of avatars available to them.  As well, citizens can have their own [[personal avatar]] to use among worlds enabled for it.  Avatars may act out various [[gestures]], and ride/hold [[mover]] objects.  Users may right-click an avatar to access that user&#039;s [[avatar menu]].&lt;br /&gt;
&lt;br /&gt;
===Objects===&lt;br /&gt;
Everything seen within a world is comprised of [[objects]].  The browser allows in public building worlds, and those with rights in private worlds, to build. Most building with the browser is done by duplication, one object duplicated, and manipulated into another object with the [[Object Properties Dialog]] box.  In worlds where one is able to build, they may access this dialog by right clicking any object.  At the discretion of the [[caretaker]], those who do not have rights to build, may or may not access the object dialog to view the data of objects.&lt;br /&gt;
&lt;br /&gt;
====Signs / Pictures / Media====&lt;br /&gt;
With [[sign|sign objects]], it is easy to display text to a user to give them information about the environment or describing an item.  [[picture|Picture objects]] are used to display a wide variety of formats for images on the web.&lt;br /&gt;
&lt;br /&gt;
A very useful feature is the ability to display [[media|media /video]] within your world, such as a music video.&lt;br /&gt;
&lt;br /&gt;
====Link objects====&lt;br /&gt;
[[URL|Link objects]] link to other websites or email address.  One can make make a mailbox, or a sign object linking to their homepage.&lt;br /&gt;
&lt;br /&gt;
====Mover objects====&lt;br /&gt;
With version 4.1 of Active Worlds, [[mover]] objects can be used for users to ride, &amp;quot;place/seat&amp;quot;, or hold.  Mover objects are designated with a hand cursor with a tooltip displaying &amp;lt;Mover&amp;gt; (or &amp;lt;&amp;quot;Mover name&amp;quot;&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
====Particles / Zones====&lt;br /&gt;
[[Particle Emitter|Particles]] can add beautiful, colorful effects to worlds.  Splashing water, fire, smoke, and weather are various effects made easily by this.&lt;br /&gt;
&lt;br /&gt;
[[Zone]]s can be used to partition world settings or a part of the environment within certain areas.  Zones can be different shapes and sizes.&lt;br /&gt;
&lt;br /&gt;
===Menubar===&lt;br /&gt;
Starting with 5.2 the menu bar is integrated into the 3D view.&lt;br /&gt;
The size of the menubar&#039;s font can be changed from the Menu/Options/Settings/Advanced dialog along with the toolbar&#039;s icon sizes.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Moving the bars&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
Hold the Right Alt key down, Right Click once into a frame and drag-move the frame to any position on screen. Once the mouse button and the Right Alt key are released, the position is locked again. &lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;Alignment and Orientation&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
When you move a frame to the left or right edges of the screen, it will auto-align its orientation vertically. &lt;br /&gt;
When you move a frame to the top or bottom edges of the screen, it will auto-align its orientation horizonal.&lt;br /&gt;
To override this kind of alignment to the screen&#039;s borders, hold the Right Ctrl key down while moving the frame to either edge of the screen.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;Center&#039;&#039;&lt;br /&gt;
 &lt;br /&gt;
To center a frame horizontal, again hold the Right Alt key down, and Double Right Click into the frame.&lt;br /&gt;
To center a frame vertically, hold the Right Alt key down along with the Right Ctrl key, and Double Right Click into the frame.&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;Storing your settings&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The relative screen position of the overlay frames is independend of the screen&#039;s dimension. Whenever the 3D viewport window gets resized, the position of the HUD frames will remain at their relative position to the edges of the screen.&lt;br /&gt;
&lt;br /&gt;
===Toolbar===&lt;br /&gt;
Starting with 5.2 the tool bar is integrated into the 3D view.&lt;br /&gt;
&lt;br /&gt;
The size of the toolbar&#039;s icons can be changed from the Menu/Options/Settings/Advanced dialog.&lt;br /&gt;
For moving and alignment of the toolbar, please look at Menubar above.&lt;br /&gt;
&lt;br /&gt;
Active Worlds supports a customizable [[toolbar]] to be used for enhanced interaction with a particular environment, or simply different styles.&lt;br /&gt;
&lt;br /&gt;
===Full screen mode===&lt;br /&gt;
The main window can be set to full screen mode with its own seperate configuration of floating and dialog windows metrics. &#039;&#039;&#039;ALT+Enter&#039;&#039;&#039; is the keyboard shortcut used to toggle this state.&lt;br /&gt;
&lt;br /&gt;
==Chat window==&lt;br /&gt;
Everything that is said within a world, in private [[whispers]], or displayed to inform the user is displayed here.  When other users talk, a user may right click a chat line to access another&#039;s [[avatar menu]].  Various errors encountered, especially object errors, will appear here as well if configured in their options to do so.&lt;br /&gt;
&lt;br /&gt;
The chat window may be docked, floating, or [[auto-hide]].&lt;br /&gt;
&lt;br /&gt;
==Tabs==&lt;br /&gt;
The tabs pane is accessible using the &#039;F9&#039; key.  It may be docked, floating, or [[auto-hide]].&lt;br /&gt;
&lt;br /&gt;
===Worlds===&lt;br /&gt;
This list displays all of the non-hidden worlds within a universe, along with the user count.  The dividers at the top of the list may be clicked to sort based on world name A-Z, or population count. Worlds may be public, or private, with gray worlds representing those private.&lt;br /&gt;
&lt;br /&gt;
Worlds are rated using guidelines not dissimilar to the MPAA motion picture ratings.  The ratings are G &amp;quot;general&amp;quot;, PG &amp;quot;parental guidance&amp;quot;, PG-13, R &amp;quot;restricted&amp;quot;, and X &amp;quot;explicit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Contacts===&lt;br /&gt;
[[Contacts]] lists are how one keeps track of other users online status, and communicates and interacts with others in the universe.  You may send telegrams to your contacts, join or invite them to your location, and adjusting privacy / block settings for that user.&lt;br /&gt;
&lt;br /&gt;
===Telegrams===&lt;br /&gt;
Telegrams that have been sent and received from users in the universe.  The dividers may be clicked to sort by that divider&#039;s category.&lt;br /&gt;
&lt;br /&gt;
===Voice Chat===&lt;br /&gt;
The voice chat tab contains the various settings for voice chat.  Visit [[Voice_chat]] to learn more about this option.&lt;br /&gt;
&lt;br /&gt;
===Teleports===&lt;br /&gt;
This tab provides a list of your saved teleports.&lt;br /&gt;
&lt;br /&gt;
===User Guide===&lt;br /&gt;
This tab shows the User Guide.&lt;br /&gt;
&lt;br /&gt;
===Users===&lt;br /&gt;
In some universes, this tab provides a list of users within the universe.&lt;br /&gt;
&lt;br /&gt;
===Search===&lt;br /&gt;
In some universes, this tab provides a search function that allows users to search for specific worlds, as identified by world owners.&lt;br /&gt;
&lt;br /&gt;
==Integrated web browser==&lt;br /&gt;
The integrated webbrowser uses Chromium Embedded Framework (CEF) to view rich web content. World owners can design websites, for example, to present the world or to guide visitors&lt;br /&gt;
&lt;br /&gt;
==Building==&lt;br /&gt;
Active Worlds supports a [[build mode]] to provide ease building.  The object properties dialog is always open, all hidden objects are shown. Physics and collision is taken out of movement, and flying is enabled.&lt;br /&gt;
&lt;br /&gt;
See [[build]]ing for more information regarding the building interface.&lt;br /&gt;
&lt;br /&gt;
[[Category:Browser interface]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Privacy&amp;diff=219</id>
		<title>Privacy</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Privacy&amp;diff=219"/>
		<updated>2026-01-10T06:46:25Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Privacy dialog allows you to control some of the information which other citizens of DeltaWorlds can learn about you. It also lets you control whether or not people you have not specified individual settings for in your contact list can send you files or join requests. &lt;br /&gt;
&lt;br /&gt;
To adjust your privacy settings, go to the Options menu and select Settings..., then click on the Privacy tab. &lt;br /&gt;
&lt;br /&gt;
==Defaults==&lt;br /&gt;
&lt;br /&gt;
* Hide my online/offline/AFK status: This setting places a question mark icon next to your name in people&#039;s contact lists where the online checkmark of AFK icon would otherwise be displayed to indicate that you are online or in &amp;quot;Away From Keyboard&amp;quot; (AFK) mode.&lt;br /&gt;
&lt;br /&gt;
* Hide my current world: This setting allows you to hide which world you are currently in so that it will not be displayed next to your name in people&#039;s contact lists. By default, if someone else has you on their contact list, they will be able to see what world you are in when you are logged in.&lt;br /&gt;
&lt;br /&gt;
* Block telegrams and whispers: This setting blocks incoming telegrams and whispers.&lt;br /&gt;
&lt;br /&gt;
* Block join requests: With this option set, if anyone tries to send you a join request they will receive a message stating that their request to join was refused.&lt;br /&gt;
&lt;br /&gt;
* Block file transfers: With this option set, if anyone tries to send you a file they will receive a message stating that you did not accept their File Transfer request. Note that for security reasons, you will always be asked to verify a file transfer request before it is accepted. Note: File transfers have been disabled in the Active Worlds Universe.&lt;br /&gt;
&lt;br /&gt;
== Other Settings == &lt;br /&gt;
&lt;br /&gt;
* Confirm contact list add requests: This allows the user to select which people are allowed on their contact lists.  &lt;br /&gt;
&lt;br /&gt;
* Confirm join requests: Causes a confirmation message to be displayed when someone tries to join you.&lt;br /&gt;
&lt;br /&gt;
* Automatically enter AFK mode: Set the number of minutes where you want to automatically be set as AFK. &lt;br /&gt;
&lt;br /&gt;
* Automatically leave AFK mode on keyboard activity: Leaves AFK mode automatically when you start typing.&lt;br /&gt;
&lt;br /&gt;
* Allow relay my chat to non-privileged bots: Enables or disables chat to be relayed to non-privileged bots.  By unchecking this, you deny bots the opportunity of logging or rebroadcasting your chat.&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Privacy&amp;diff=218</id>
		<title>Privacy</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Privacy&amp;diff=218"/>
		<updated>2026-01-10T06:46:08Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;The Privacy dialog allows you to control some of the information which other citizens of Active Worlds can learn about you. It also lets you control whether or not people you have not specified individual settings for in your contact list can send you files or join requests.   To adjust your privacy settings, go to the Options menu and select Settings..., then click on the Privacy tab.   ==Defaults==  * Hide my online/offline/AFK status: This setting places a question ma...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Privacy dialog allows you to control some of the information which other citizens of Active Worlds can learn about you. It also lets you control whether or not people you have not specified individual settings for in your contact list can send you files or join requests. &lt;br /&gt;
&lt;br /&gt;
To adjust your privacy settings, go to the Options menu and select Settings..., then click on the Privacy tab. &lt;br /&gt;
&lt;br /&gt;
==Defaults==&lt;br /&gt;
&lt;br /&gt;
* Hide my online/offline/AFK status: This setting places a question mark icon next to your name in people&#039;s contact lists where the online checkmark of AFK icon would otherwise be displayed to indicate that you are online or in &amp;quot;Away From Keyboard&amp;quot; (AFK) mode.&lt;br /&gt;
&lt;br /&gt;
* Hide my current world: This setting allows you to hide which world you are currently in so that it will not be displayed next to your name in people&#039;s contact lists. By default, if someone else has you on their contact list, they will be able to see what world you are in when you are logged in.&lt;br /&gt;
&lt;br /&gt;
* Block telegrams and whispers: This setting blocks incoming telegrams and whispers.&lt;br /&gt;
&lt;br /&gt;
* Block join requests: With this option set, if anyone tries to send you a join request they will receive a message stating that their request to join was refused.&lt;br /&gt;
&lt;br /&gt;
* Block file transfers: With this option set, if anyone tries to send you a file they will receive a message stating that you did not accept their File Transfer request. Note that for security reasons, you will always be asked to verify a file transfer request before it is accepted. Note: File transfers have been disabled in the Active Worlds Universe.&lt;br /&gt;
&lt;br /&gt;
== Other Settings == &lt;br /&gt;
&lt;br /&gt;
* Confirm contact list add requests: This allows the user to select which people are allowed on their contact lists.  &lt;br /&gt;
&lt;br /&gt;
* Confirm join requests: Causes a confirmation message to be displayed when someone tries to join you.&lt;br /&gt;
&lt;br /&gt;
* Automatically enter AFK mode: Set the number of minutes where you want to automatically be set as AFK. &lt;br /&gt;
&lt;br /&gt;
* Automatically leave AFK mode on keyboard activity: Leaves AFK mode automatically when you start typing.&lt;br /&gt;
&lt;br /&gt;
* Allow relay my chat to non-privileged bots: Enables or disables chat to be relayed to non-privileged bots.  By unchecking this, you deny bots the opportunity of logging or rebroadcasting your chat.&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Contacts&amp;diff=217</id>
		<title>Contacts</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Contacts&amp;diff=217"/>
		<updated>2026-01-10T06:45:28Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Over time, you’ll make many new friends within DeltaWorlds.  To keep up with these friends, you can add them to your contact list.  From your contact list, you’ll be able to see when they are online, you can send them telegrams, and you can join or invite them to different locations.&lt;br /&gt;
&lt;br /&gt;
There are three ways to add a new contact to this list:&lt;br /&gt;
&lt;br /&gt;
* Right click on their avatar, then click “Add to Contacts”, or&lt;br /&gt;
* Right click on their name in chat, then click “Add to Contacts”, or&lt;br /&gt;
* Right click in the contacts tab and click “Add New Contact”.  From there, type in their name exactly as it appears.&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Contacts&amp;diff=216</id>
		<title>Contacts</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Contacts&amp;diff=216"/>
		<updated>2026-01-10T06:45:14Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;Over time, you’ll make many new friends within Active Worlds.  To keep up with these friends, you can add them to your contact list.  From your contact list, you’ll be able to see when they are online, you can send them telegrams, and you can join or invite them to different locations.  There are three ways to add a new contact to this list:  * Right click on their avatar, then click “Add to Contacts”, or * Right click on their name in chat, then click “Add to...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Over time, you’ll make many new friends within Active Worlds.  To keep up with these friends, you can add them to your contact list.  From your contact list, you’ll be able to see when they are online, you can send them telegrams, and you can join or invite them to different locations.&lt;br /&gt;
&lt;br /&gt;
There are three ways to add a new contact to this list:&lt;br /&gt;
&lt;br /&gt;
* Right click on their avatar, then click “Add to Contacts”, or&lt;br /&gt;
* Right click on their name in chat, then click “Add to Contacts”, or&lt;br /&gt;
* Right click in the contacts tab and click “Add New Contact”.  From there, type in their name exactly as it appears.&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Public_Speaker&amp;diff=215</id>
		<title>Public Speaker</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Public_Speaker&amp;diff=215"/>
		<updated>2026-01-10T06:44:29Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;The caretaker of a world may occasionally designate certain citizens to be &amp;#039;&amp;#039;&amp;#039;Public Speakers&amp;#039;&amp;#039;&amp;#039; (PS), who are citizens whose chat messages are transmitted to all users within a given area. Everyone in the area can hear and see a public speaker, regardless of how many other people are around. You can tell a Public Speaker by the fact that their chat messages appear in that chat window in bold text.  Since by default all users hear the nearest 50 users, the Public Spe...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The [[caretaker]] of a world may occasionally designate certain citizens to be &#039;&#039;&#039;Public Speakers&#039;&#039;&#039; (PS), who are citizens whose chat messages are transmitted to all users within a given area. Everyone in the area can hear and see a public speaker, regardless of how many other people are around. You can tell a Public Speaker by the fact that their chat messages appear in that chat window in bold text.&lt;br /&gt;
&lt;br /&gt;
Since by default all users hear the nearest 50 users, the Public Speaker effect is only really useful in situations where there are more than 50 people gathered in a single location, such as very large gatherings and events.&lt;br /&gt;
&lt;br /&gt;
If you encounter a public speaker in a world, remember that they can hear all the conversations going on around them, so be patient if he/she does not respond immediately to your questions. In really crowded areas it is can be quite difficult for a public speaker to hold individual conversations since there are so many people talking at once.&lt;br /&gt;
&lt;br /&gt;
Public Speakers have access to additional [[Special Avatars|special avatars]] which other citizens cannot use.&lt;br /&gt;
&lt;br /&gt;
[[Category: World administration]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Category:Communicating&amp;diff=214</id>
		<title>Category:Communicating</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Category:Communicating&amp;diff=214"/>
		<updated>2026-01-10T06:44:04Z</updated>

		<summary type="html">&lt;p&gt;Xan: Redirected page to Communication&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Communication]]&lt;br /&gt;
&lt;br /&gt;
{{R from gerund}}&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Communicating&amp;diff=213</id>
		<title>Communicating</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Communicating&amp;diff=213"/>
		<updated>2026-01-10T06:43:21Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;DeltaWorlds is a social environment.  From chatting to building in groups, the application is designed around interaction.  Within DeltaWorlds, you will meet people from a wide variety of places.  Knowing the various ways to talk with people is important to forming relationships.    ==Communicating==  Chatting with other people is an important part of the Active Worlds experience. When you enter a world, after the scene loads you may see avatars around you representing o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DeltaWorlds is a social environment.  From chatting to building in groups, the application is designed around interaction.  Within DeltaWorlds, you will meet people from a wide variety of places.  Knowing the various ways to talk with people is important to forming relationships.  &lt;br /&gt;
&lt;br /&gt;
==Communicating==&lt;br /&gt;
&lt;br /&gt;
Chatting with other people is an important part of the Active Worlds experience. When you enter a world, after the scene loads you may see avatars around you representing other people who are near you in the same world. Depending on the world&#039;s settings, you might also notice that avatars have names above their heads when you get close to them, or after that person has said something while they are in your chat range. When other people talk, in most worlds, what they say will generally also appear above their avatar&#039;s head. Eventually, the above-head messages might disappear or be replaced, but the names will remain. You can either read what people say as it appears above their heads, or in the Chat History frame which also displays messages from people who are behind you or off to the side, as long as they are within your chat range. The Chat History will also display whispers, and messages from parts of the system such as the Immigration Officer or the Building Inspector, and console messages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===The Chat Window===&lt;br /&gt;
At the core of this social interaction is the chat window.  After first arriving in Active Worlds, the chat box is shown at the bottom of the screen.  &lt;br /&gt;
&lt;br /&gt;
The top portion of the chat window is where you will see most of the chat.  This chat contains text from users as well as bots and system messages.  Some of the things that you will encounter include:&lt;br /&gt;
&lt;br /&gt;
* System Messages: These are the first messages that appear in the chat window when first entering.  Occasionally they may appear during system maintenance.  Usually, these messages contain important information from Active Worlds.  &lt;br /&gt;
* World Messages: These messages usually immediately follow the system messages, and appear after you first enter a new world.  These messages are from the world owners and may contain a welcome message, the name of the world, and other information that the world owners think you may need. World messages also appear in a green colored text.&lt;br /&gt;
* Public Speakers: Public speakers appear in bold text and serve various functions.&lt;br /&gt;
* Public Speakers in Private Worlds: These consist of world owners and individuals that the world owners have given the authority to speak in bold. &lt;br /&gt;
* Bots: Bots are computer generated characters that serve a function in the world.  Bots are usually created to add functions to the software.  Functions could include games or chat additions, like colored chat.   The bots are always identified with brackets surrounding their name in the &amp;quot;whisper&amp;quot; section at the bottom of the main chat window, as such: [bot]  &lt;br /&gt;
* Users: These are other users on the program. Their text may appear black, brown, or blue, according to your listening settings.  In worlds where chat bots are in use, users may appear in a variety of colors.&lt;br /&gt;
* Whispers: These are private chat that only you can see.  It is always in blue italics.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Local, Global, and GZ Chat Options:&#039;&#039;&#039;&lt;br /&gt;
In the Active Worlds browser, there are two sections immediately under the main chat area that consist of “Talk to” and “Listen to” options.  The drop-down box to the right of “Talk to” provides three options: Global, GZ, and Local.  Global allows you to talk to anyone within the world, regardless of distance.  GZ restricts chat to those who are located at the “Gatezone”, or landing area.  This is a certain distance from the center of the world.  Local restricts chat to those who are near you.&lt;br /&gt;
&lt;br /&gt;
Similarly, the options located next to “Listen to” define who you can hear.  Checking “Global” enables you to hear anyone else who is on global chat no matter their distance away from you.  Local restricts listening to only those who are near you.&lt;br /&gt;
&lt;br /&gt;
Some worlds offer further options that enable you to listen to or chat with certain parts of that particular world.  To find out which areas they cover, you would have to contact the world owner for those details.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To talk to other people:&#039;&#039;&#039;&lt;br /&gt;
Under the “Talk to” section is the chat input area.  This is where you can type to send chat messages to other users.  What you type appears in the Message box, also known as the Chat Entry box, which is located just below the Chat History. After typing your chat message, pressing the Enter key sends your message. Then you&#039;ll see your message appear in the Chat History window, and other people that you are within chat range of will see it also.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To mute other people:&#039;&#039;&#039; &lt;br /&gt;
If someone is speaking that you would rather not see any more chat messages from, you can mute them. To mute someone, right click on that person&#039;s avatar and select Mute from the avatar pop-up menu. You can un-mute them again later by repeating the same procedure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Whispering:&#039;&#039;&#039; &lt;br /&gt;
The bottom section of the chat window is for private text, called “whispers”.   The whisper box is not shown by default and must be enabled.  To enable whispers, select Show and then check Whispers.  With the whisper box, use thedrop-downn to select the person that you want to whisper to and then type the private message in the message box to the right.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Resizing the Chat Window&#039;&#039;&#039;&lt;br /&gt;
You can resize the chat window by changing the border between the main 3D-view window and the Chat History frame. Just position the cursor over the border between the 3D-window and the chat window until you see an up-down arrow, then hold down your primary mouse button and drag the border to the desired position.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Reading Past Chat&#039;&#039;&#039;&lt;br /&gt;
You can also use the scroll-up and scroll-down buttons next to the chat history to look at messages that have scrolled off of the screen. These buttons move the text in the window up or down one line at a time. You can also click either above or below the &#039;slider bar&#039; divider between the scroll buttons to move the text up or down one &#039;page&#039; at a time.&lt;br /&gt;
&lt;br /&gt;
The Chat History window displays any error messages you may get while building, for instance, if you try to build too many objects in one place, or change someone else&#039;s property. These errors are given to you as a message from the all-powerful &amp;quot;Building Inspector&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Avatar Pop-up menu===&lt;br /&gt;
Right-clicking on an avatar brings up additional options.  These include: &lt;br /&gt;
&lt;br /&gt;
* Mute on Sight: This silences all chat coming from this person.&lt;br /&gt;
* Whisper: Activates the avatar in the Whisper box below chat.&lt;br /&gt;
* View Home Page: If the user has defined a home page, this enables you to visit the website they have designated.  The home page can be designated by your Citizen Attributes.  Click on Options in the menu, then click on Citizen.  When the Citizen Attributes box appears, type in the URL of your home page with he label &amp;quot;Home Page&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Joining&#039;&#039;&#039;&lt;br /&gt;
Using the Contact List, you can join other people in Active Worlds, wherever they happen to be. To join someone, right-click on their name and select Join. You will be teleported to their current location.&lt;br /&gt;
&lt;br /&gt;
A successful join requires that the join be allowed by the person whom you are trying to join. It also requires that you have Enter privileges in the world in which that person&#039;s avatar is located at that time. Don&#039;t take it personally if people fail to accept your join requests. They may have left their computer unattended briefly and missed the request, or they may have set it to auto-reject join requests during a private meeting and simply forgotten to change it back. In fact, there are many possible reasons why a join request may not be accepted. It&#039;s generally a good idea to establish communication through telegrams before attempting to join someone. You can control who can join you with the Privacy dialog box.&lt;br /&gt;
&lt;br /&gt;
If the person you are attempting to join has set their privacy options to block join requests from you or from all people, your join request will automatically be rejected. If the person does not accept or reject your request within 30 seconds, the request will expire. &lt;br /&gt;
&lt;br /&gt;
===Contact List===&lt;br /&gt;
&lt;br /&gt;
Over time, you’ll make many new friends within Active Worlds.  To keep up with these friends, you can add them to your contact list.  From your contact list, you’ll be able to see when they are online, you can send them telegrams, and you can join or invite them to different locations.&lt;br /&gt;
&lt;br /&gt;
There are three ways to add a new contact to this list:&lt;br /&gt;
&lt;br /&gt;
* Right click on their avatar, then click “Add to Contacts”, or&lt;br /&gt;
* Right click on their name in chat, then click “Add to Contacts”, or&lt;br /&gt;
* Right click in the contacts tab and click “Add New Contact”.  From there, type in their name exactly as it appears.&lt;br /&gt;
&lt;br /&gt;
===Telegrams===&lt;br /&gt;
Telegrams are instant messages that you can send to people for them to read at a later date.  To send or receive a telegram, you must add the person to your contact list as shown above.  &lt;br /&gt;
&lt;br /&gt;
Telegrams can be found in the Telegram Tab.  The telegram tab consists of a simple list of telegrams sent and received.  These can be sorted by name or by date by clicking on the top row. New telegrams appear with a notification in the chat window, and they will have a red telegram icon in the telegram tab.  To read the telegram, simply click on it and it will appear in your chat window. To reply, right click on the telegram in the telegram tab and select reply.  To send a new telegram, open the Contacts tab, right click on the person you want to send a message to, and then click on send telegram.&lt;br /&gt;
&lt;br /&gt;
In the telegram tab, when you right click on a telegram you also have the option to delete the message or to block the user.&lt;br /&gt;
&lt;br /&gt;
===Sending Files===&lt;br /&gt;
Sending files is accomplished by right-clicking on a name in the contacts tab. A confirmation window opens for them and once they agree by clicking ok, a file transfer window opens up. You select the file folder and the file or files to be sent. The other person has another window where they select the destination folder.&lt;br /&gt;
&lt;br /&gt;
If either person is behind a router, the port that is used for this (port 3000) has to be forwarded to the computer where the AW browser is running. If this is not set the file transfer will fail.&lt;br /&gt;
&lt;br /&gt;
This option is disabled in some universes running the Active Worlds software.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Public Speakers&#039;&#039;&#039;&lt;br /&gt;
See: [[Public Speaker]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Communicating]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Some Chat Tips For Beginners==&lt;br /&gt;
&lt;br /&gt;
===General Tips===&lt;br /&gt;
&lt;br /&gt;
Talking to other users, or &amp;quot;chatting&amp;quot;, in Active Worlds is similar to chatting in any other Internet chat environment. Simply type whatever it is you would like to say and hit the ENTER key. Your words will be broadcast to everyone else nearby. Similarly, whatever words other people type will be sent to you and will appear on your screen.&lt;br /&gt;
&lt;br /&gt;
If you are new to chatting over the Internet, you will quickly discover that chat has a unique set of rules and jargon (sometimes referred to as &amp;quot;netiquette&amp;quot;) that can be confusing to a newcomer. But never fear, in just a few minutes you can familiarize yourself with some basic guidelines and in no time you will be chatting like a pro!&lt;br /&gt;
&lt;br /&gt;
Here are some basic tips to keep in mind if you want to have a positive chatting experience:&lt;br /&gt;
&lt;br /&gt;
*Never type in all capital letters. WHEN YOU TYPE IN ALL CAPITAL LETTERS IT SOUNDS LIKE YOU ARE SHOUTING! People generally find this very annoying.&lt;br /&gt;
*Be polite to strangers. If you don&#039;t know the people you are talking to, it is appropriate to be as polite as if you are meeting someone for the first time in real life.&lt;br /&gt;
*If someone doesn&#039;t want to chat, don&#039;t harass them. There are plenty of people in Active Worlds to talk to. If one person doesn&#039;t want to chat with you, just move on, don&#039;t pester them.&lt;br /&gt;
*Don&#039;t be offensive. Offensive behavior is totally inappropriate unless you are in private and among good friends who have indicated that they do not mind. Otherwise, you will just annoy everyone and you will wind up getting muted. Also in certain worlds and areas within worlds (such as Ground Zero in AlphaWorld) offensive behavior may be grounds for ejection. &lt;br /&gt;
&lt;br /&gt;
===Some common terms===&lt;br /&gt;
&lt;br /&gt;
Over the years, Internet chat has adopted some shorthand equivalents for common terms. Here are a few of the most common:&lt;br /&gt;
&lt;br /&gt;
* LOL - Laughing Out Load&lt;br /&gt;
* ROTFL - Rolling On The Floor Laughing&lt;br /&gt;
* BRB - Be Right Back&lt;br /&gt;
* IMO - In My Opinion (also IMHO for In My Humble Opinion) &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smileys&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Smileys&amp;quot; or &amp;quot;emoticons&amp;quot; are special combinations of characters that people sometimes use to indicate emotion. Most are intended to look like a smiling face turned sideways. For example:&lt;br /&gt;
&lt;br /&gt;
:-)&lt;br /&gt;
&lt;br /&gt;
There is an almost infinite number of variations on this simple theme.&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Chat&amp;diff=212</id>
		<title>Chat</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Chat&amp;diff=212"/>
		<updated>2026-01-10T06:42:33Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;This article shares content and wording with [[Communicating]].&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Talking to other users, or &amp;quot;chatting&amp;quot;, in [[Delta Worlds]] is similar to chatting in any other Internet chat environment. Simply type whatever it is you would like to say and hit the ENTER key. Your words will be broadcast to everyone else nearby. Similarly, whatever words other people type will be sent to you and will appear on your screen.&lt;br /&gt;
&lt;br /&gt;
If you are new to chatting over the Internet, you will quickly discover that chat has a unique set of rules and jargon (sometimes referred to as &amp;quot;netiquette&amp;quot;) that can be confusing to a newcomer. But never fear, in just a few minutes you can familiarize yourself with some basic guidelines and in no time you will be chatting like a pro!&lt;br /&gt;
&lt;br /&gt;
Here are some basic tips to keep in mind if you want to have a positive chatting experience:&lt;br /&gt;
&lt;br /&gt;
Never type in all capital letters. WHEN YOU TYPE IN ALL CAPITAL LETTERS IT SOUNDS LIKE YOU ARE SHOUTING! People generally find this very annoying.&lt;br /&gt;
Be polite to strangers. If you don&#039;t know the people you are talking to, it is appropriate to be as polite as if you are meeting someone for the first time in real life.&lt;br /&gt;
If someone doesn&#039;t want to chat, don&#039;t harass them. There are plenty of people in Active Worlds to talk to. If one person doesn&#039;t want to chat with you, just move on, don&#039;t pester them.&lt;br /&gt;
Don&#039;t be offensive. Offensive behavior is totally inappropriate unless you are in private and among good friends who have indicated that they do not mind. Otherwise, you will just annoy everyone and you will wind up getting muted. Also in certain worlds and areas within worlds (such as Ground Zero in AlphaWorld) offensive behavior may be grounds for ejection. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some common terms&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Over the years, Internet chat has adopted some shorthand equivalents for common terms. Here are a few of the most common:&lt;br /&gt;
&lt;br /&gt;
    * LOL - Laughing Out Load&lt;br /&gt;
    * ROTFL - Rolling On The Floor Laughing&lt;br /&gt;
    * BRB - Be Right Back&lt;br /&gt;
    * IMO - In My Opinion (also IMHO for In My Humble Opinion) &lt;br /&gt;
    * AFK - Away From Keyboard&lt;br /&gt;
&lt;br /&gt;
Here are a few of the most common abbrivations/emoticons you will find users using exclusively in the Activeworlds Browser:&lt;br /&gt;
&lt;br /&gt;
    * ((&amp;lt;User Name&amp;gt;)) - This is to give someone a hug, adding parentheses around someone&#039;s name will let them know you hugged them.&lt;br /&gt;
    * AFAW - Away From Activeworlds&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smileys&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Smileys&amp;quot; or &amp;quot;emoticons&amp;quot; are special combinations of characters that people sometimes use to indicate emotion. Most are intended to look like a smiling face turned sideways. For example:&lt;br /&gt;
&lt;br /&gt;
    :-)&lt;br /&gt;
&lt;br /&gt;
There are an almost infinite number of variations on this simple theme. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To talk to other people:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To talk to other people, all you have to do is type your message. What you type appears in the Message box, also known as the Chat Entry box, which is located just below the Chat History. After typing your chat message, pressing the Enter key sends your message. Then you&#039;ll see your message appear in the Chat History window, and other people that you are within chat range of will see it also.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To mute other people:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If someone is speaking that you would rather not see any more chat messages from, you can mute them. To mute someone, right click on that person&#039;s avatar and select Mute from the avatar pop-up menu. You can un-mute them again later by repeating the same procedure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chat Window&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can resize the chat window by changing the border between the main 3D-view window and the Chat History frame. Just position the cursor over the border between the 3D-window and the chat window until you see an up-down arrow, then hold down your primary mouse button and drag the border to the desired position.&lt;br /&gt;
&lt;br /&gt;
You can also use the scroll-up and scroll-down buttons next to the chat history to look at messages that have scrolled off of the screen. These buttons move the text in the window up or down one line at a time. You can also click either above or below the &#039;slider bar&#039; divider between the scroll buttons to move the text up or down one &#039;page&#039; at a time.&lt;br /&gt;
&lt;br /&gt;
The Chat History window displays any error messages you may get while building, for instance if you try to build too many objects in one place, or change someone else&#039;s property. These errors are given to you as a message from the all-powerful &amp;quot;Building Inspector&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The avatar &amp;quot;pop-up&amp;quot; menu can be invoked in one of two ways: you can right-click with the mouse directly on an avatar in the 3D window, or you can right-click on a line of chat text in the chat window to bring up the avatar menu for that user.&lt;br /&gt;
&lt;br /&gt;
The various options available on this menu depend on what rights you have and what type of user they are:&lt;br /&gt;
&lt;br /&gt;
    The top line of the menu identifies the name of the user you clicked on. If the user is a citizen, it also displays their citizen number. If the user is a bot, it displays the citizen number of the bot&#039;s owner. Citizen number and bot owner information is only available if the world server is running version 3.1 or later. The other menu options are as follows:&lt;br /&gt;
&lt;br /&gt;
     Mute&lt;br /&gt;
     Allows you to mute the user. When a user is muted, you no longer receive any of their chat messages.&lt;br /&gt;
&lt;br /&gt;
     Whisper&lt;br /&gt;
     Allows you to whisper to the user. Whispers are private chat messages that only the recipient sees.&lt;br /&gt;
&lt;br /&gt;
     Add to contacts&lt;br /&gt;
     This option is enabled if the user is a citizen. It adds them to your contact list.&lt;br /&gt;
&lt;br /&gt;
     Eject...&lt;br /&gt;
     This option is enabled if you have eject rights in the world. It allows you to eject the user from the world.&lt;br /&gt;
&lt;br /&gt;
     View Home Page&lt;br /&gt;
     This option is new in Active Worlds 3.1 and is enabled if the user is a citizen. It allows you to view their home page if they have one set.&lt;br /&gt;
&lt;br /&gt;
     Look up citizen...&lt;br /&gt;
     This final option is only enabled for universe administrators and if the user is a citizen. It opens the citizens dialog and looks up the user&#039;s account. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Whispering&#039;&#039;&#039;&lt;br /&gt;
A whisper is a chat message sent directly to another user. When you whisper, the recipient is the only person who can hear what you say.&lt;br /&gt;
&lt;br /&gt;
The whisper controls are disabled by default in simple mode. If the whisper controls are not visible in your browser, either press the Advanced Mode button, or select Whisper from the Show Menu.&lt;br /&gt;
&lt;br /&gt;
To whisper to someone, first select their name in the &amp;quot;Whisper To&amp;quot; list. Then simply type your message in the whisper field and press Enter like you would for a normal chat message. You can also whisper to someone by selecting Whisper from the avatar pop-up menu.&lt;br /&gt;
&lt;br /&gt;
Whispers appear in your chat history window in blue italics to distinguish them form normal chat. Whispers that you send are listed along with the name of the person you whispered to.&lt;br /&gt;
&lt;br /&gt;
Note that you can quickly switch back and forth between the normal chat field, the whisper list and the whisper chat field by simply pressing the Tab key.&lt;br /&gt;
&lt;br /&gt;
Also note that in order to whisper to someone, they must be physically nearby and they must have already revealed their identity by speaking (either via normal chat, or by first whispering to you.) Mute blocks whispers as well as normal chat. If there is currently no one around to whisper to, the whisper field will automatically disable itself.&lt;br /&gt;
&lt;br /&gt;
Be aware that in some worlds the ability to whisper may be disabled for tourists. This option is set in the World Features dialog.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to whisper you can hide the extra whisper controls from the Show Menu or by pressing the F8 key.&lt;br /&gt;
&lt;br /&gt;
[[Category: Communicating]]&lt;br /&gt;
[[nl:Chatten]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Chat&amp;diff=211</id>
		<title>Chat</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Chat&amp;diff=211"/>
		<updated>2026-01-10T06:42:15Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;This article shares content and wording with Communicating.&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;   Talking to other users, or &amp;quot;chatting&amp;quot;, in Active Worlds is similar to chatting in any other Internet chat environment. Simply type whatever it is you would like to say and hit the ENTER key. Your words will be broadcast to everyone else nearby. Similarly, whatever words other people type will be sent to you and will appear on your screen.  If you are new to chatting over the Internet...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;This article shares content and wording with [[Communicating]].&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Talking to other users, or &amp;quot;chatting&amp;quot;, in [[Active Worlds]] is similar to chatting in any other Internet chat environment. Simply type whatever it is you would like to say and hit the ENTER key. Your words will be broadcast to everyone else nearby. Similarly, whatever words other people type will be sent to you and will appear on your screen.&lt;br /&gt;
&lt;br /&gt;
If you are new to chatting over the Internet, you will quickly discover that chat has a unique set of rules and jargon (sometimes referred to as &amp;quot;netiquette&amp;quot;) that can be confusing to a newcomer. But never fear, in just a few minutes you can familiarize yourself with some basic guidelines and in no time you will be chatting like a pro!&lt;br /&gt;
&lt;br /&gt;
Here are some basic tips to keep in mind if you want to have a positive chatting experience:&lt;br /&gt;
&lt;br /&gt;
Never type in all capital letters. WHEN YOU TYPE IN ALL CAPITAL LETTERS IT SOUNDS LIKE YOU ARE SHOUTING! People generally find this very annoying.&lt;br /&gt;
Be polite to strangers. If you don&#039;t know the people you are talking to, it is appropriate to be as polite as if you are meeting someone for the first time in real life.&lt;br /&gt;
If someone doesn&#039;t want to chat, don&#039;t harass them. There are plenty of people in Active Worlds to talk to. If one person doesn&#039;t want to chat with you, just move on, don&#039;t pester them.&lt;br /&gt;
Don&#039;t be offensive. Offensive behavior is totally inappropriate unless you are in private and among good friends who have indicated that they do not mind. Otherwise, you will just annoy everyone and you will wind up getting muted. Also in certain worlds and areas within worlds (such as Ground Zero in AlphaWorld) offensive behavior may be grounds for ejection. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Some common terms&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Over the years, Internet chat has adopted some shorthand equivalents for common terms. Here are a few of the most common:&lt;br /&gt;
&lt;br /&gt;
    * LOL - Laughing Out Load&lt;br /&gt;
    * ROTFL - Rolling On The Floor Laughing&lt;br /&gt;
    * BRB - Be Right Back&lt;br /&gt;
    * IMO - In My Opinion (also IMHO for In My Humble Opinion) &lt;br /&gt;
    * AFK - Away From Keyboard&lt;br /&gt;
&lt;br /&gt;
Here are a few of the most common abbrivations/emoticons you will find users using exclusively in the Activeworlds Browser:&lt;br /&gt;
&lt;br /&gt;
    * ((&amp;lt;User Name&amp;gt;)) - This is to give someone a hug, adding parentheses around someone&#039;s name will let them know you hugged them.&lt;br /&gt;
    * AFAW - Away From Activeworlds&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Smileys&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Smileys&amp;quot; or &amp;quot;emoticons&amp;quot; are special combinations of characters that people sometimes use to indicate emotion. Most are intended to look like a smiling face turned sideways. For example:&lt;br /&gt;
&lt;br /&gt;
    :-)&lt;br /&gt;
&lt;br /&gt;
There are an almost infinite number of variations on this simple theme. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To talk to other people:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To talk to other people, all you have to do is type your message. What you type appears in the Message box, also known as the Chat Entry box, which is located just below the Chat History. After typing your chat message, pressing the Enter key sends your message. Then you&#039;ll see your message appear in the Chat History window, and other people that you are within chat range of will see it also.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;To mute other people:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If someone is speaking that you would rather not see any more chat messages from, you can mute them. To mute someone, right click on that person&#039;s avatar and select Mute from the avatar pop-up menu. You can un-mute them again later by repeating the same procedure.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Chat Window&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
You can resize the chat window by changing the border between the main 3D-view window and the Chat History frame. Just position the cursor over the border between the 3D-window and the chat window until you see an up-down arrow, then hold down your primary mouse button and drag the border to the desired position.&lt;br /&gt;
&lt;br /&gt;
You can also use the scroll-up and scroll-down buttons next to the chat history to look at messages that have scrolled off of the screen. These buttons move the text in the window up or down one line at a time. You can also click either above or below the &#039;slider bar&#039; divider between the scroll buttons to move the text up or down one &#039;page&#039; at a time.&lt;br /&gt;
&lt;br /&gt;
The Chat History window displays any error messages you may get while building, for instance if you try to build too many objects in one place, or change someone else&#039;s property. These errors are given to you as a message from the all-powerful &amp;quot;Building Inspector&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
The avatar &amp;quot;pop-up&amp;quot; menu can be invoked in one of two ways: you can right-click with the mouse directly on an avatar in the 3D window, or you can right-click on a line of chat text in the chat window to bring up the avatar menu for that user.&lt;br /&gt;
&lt;br /&gt;
The various options available on this menu depend on what rights you have and what type of user they are:&lt;br /&gt;
&lt;br /&gt;
    The top line of the menu identifies the name of the user you clicked on. If the user is a citizen, it also displays their citizen number. If the user is a bot, it displays the citizen number of the bot&#039;s owner. Citizen number and bot owner information is only available if the world server is running version 3.1 or later. The other menu options are as follows:&lt;br /&gt;
&lt;br /&gt;
     Mute&lt;br /&gt;
     Allows you to mute the user. When a user is muted, you no longer receive any of their chat messages.&lt;br /&gt;
&lt;br /&gt;
     Whisper&lt;br /&gt;
     Allows you to whisper to the user. Whispers are private chat messages that only the recipient sees.&lt;br /&gt;
&lt;br /&gt;
     Add to contacts&lt;br /&gt;
     This option is enabled if the user is a citizen. It adds them to your contact list.&lt;br /&gt;
&lt;br /&gt;
     Eject...&lt;br /&gt;
     This option is enabled if you have eject rights in the world. It allows you to eject the user from the world.&lt;br /&gt;
&lt;br /&gt;
     View Home Page&lt;br /&gt;
     This option is new in Active Worlds 3.1 and is enabled if the user is a citizen. It allows you to view their home page if they have one set.&lt;br /&gt;
&lt;br /&gt;
     Look up citizen...&lt;br /&gt;
     This final option is only enabled for universe administrators and if the user is a citizen. It opens the citizens dialog and looks up the user&#039;s account. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Whispering&#039;&#039;&#039;&lt;br /&gt;
A whisper is a chat message sent directly to another user. When you whisper, the recipient is the only person who can hear what you say.&lt;br /&gt;
&lt;br /&gt;
The whisper controls are disabled by default in simple mode. If the whisper controls are not visible in your browser, either press the Advanced Mode button, or select Whisper from the Show Menu.&lt;br /&gt;
&lt;br /&gt;
To whisper to someone, first select their name in the &amp;quot;Whisper To&amp;quot; list. Then simply type your message in the whisper field and press Enter like you would for a normal chat message. You can also whisper to someone by selecting Whisper from the avatar pop-up menu.&lt;br /&gt;
&lt;br /&gt;
Whispers appear in your chat history window in blue italics to distinguish them form normal chat. Whispers that you send are listed along with the name of the person you whispered to.&lt;br /&gt;
&lt;br /&gt;
Note that you can quickly switch back and forth between the normal chat field, the whisper list and the whisper chat field by simply pressing the Tab key.&lt;br /&gt;
&lt;br /&gt;
Also note that in order to whisper to someone, they must be physically nearby and they must have already revealed their identity by speaking (either via normal chat, or by first whispering to you.) Mute blocks whispers as well as normal chat. If there is currently no one around to whisper to, the whisper field will automatically disable itself.&lt;br /&gt;
&lt;br /&gt;
Be aware that in some worlds the ability to whisper may be disabled for tourists. This option is set in the World Features dialog.&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t want to whisper you can hide the extra whisper controls from the Show Menu or by pressing the F8 key.&lt;br /&gt;
&lt;br /&gt;
[[Category: Communicating]]&lt;br /&gt;
[[nl:Chatten]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Teleports&amp;diff=210</id>
		<title>Teleports</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Teleports&amp;diff=210"/>
		<updated>2026-01-10T06:40:06Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==The Coordinate System==&lt;br /&gt;
Each world within DeltaWorlds is set up based on the real world.  Locations in the real world can be found by using GPS coordinates.  The same method is used within Active Worlds.  These virtual GPS coordinates are based on the center of each world. &lt;br /&gt;
&lt;br /&gt;
Your coordinates can be found by clicking “SHOW” in the menu bar and then enabling “Position”.  Your rough coordinates can now be found in the header bar above the menu.&lt;br /&gt;
&lt;br /&gt;
==Visiting Other Areas, Also Known as Teleporting==&lt;br /&gt;
While you may wish to walk around to visit different areas, in many worlds, this can be very time-consuming.  For example, the world “AW”, also known as Alpha World, is larger than the U.S. State of California.  Imagine trying to walk from one end of the state to the other.&lt;br /&gt;
&lt;br /&gt;
An easier way of moving about is to “teleport”.  Teleporting uses the World Coordinate System to move you from one location to another, similar to finding GPS locations on a map.&lt;br /&gt;
&lt;br /&gt;
* To teleport to a specific location, select Teleport in the menu, and then click on To…  This will bring up a box that includes two fields named World and Teleport.  The world field is the world that you want to teleport to.  This matches the world name in the Worlds Tab.  The Coordinates field is the “GPS” locations that you want to teleport to.  Both fields must be completed in order to teleport.  The “teleport” field must have a North/South designation and an East/West designation. Once the fields are entered, press OK to teleport to that location.&lt;br /&gt;
* To teleport forward, select Forward in the teleport menu.  This only works if you have teleported back from a previous location.  You can also use the Teleport Forward icon located on the toolbar.&lt;br /&gt;
* To teleport back to a previous location, select Back in the teleport menu. You can also use the Teleport Back icon located on the toolbar.&lt;br /&gt;
* To teleport to your home location, select Home in the teleport menu. You can also use the Home icon located on the toolbar.&lt;br /&gt;
* To set a new location as your starting location, select Make This My Home in the teleport menu.  This will create a new starting location for you when you enter the Active Worlds browser.&lt;br /&gt;
* To remember a location, select Remember.  This is essentially the same as bookmarking a website to visit later.  After selecting Remember, a box will appear where you can give the location a name.  Hint: When naming locations, it’s best to be specific.  Leave the world name but add in a descriptive phrase so that you can easily remember what the bookmark was at a later date.&lt;br /&gt;
&lt;br /&gt;
==Accessing Teleports through the Teleport Tab==&lt;br /&gt;
The teleports tab is similar to your web browsers bookmark menu.  All of the teleports that you have saved using the “Remember” function are stored in the teleport tab in a list.  To visit a saved teleport, simply click on the name of the teleport.  In addition, several actions can be taken inside of the tab box.  These actions include:&lt;br /&gt;
&lt;br /&gt;
*Rename: Change the name of a teleport by right-clicking on them and then selecting “Rename”.&lt;br /&gt;
* Delete: Delete a teleport by right-clicking on the teleport and selecting “Delete”.&lt;br /&gt;
* Teleport: This functions the same as the Teleport option in the menu bar.&lt;br /&gt;
* Teleport Back: This functions the same as the Teleport option in the menu bar.&lt;br /&gt;
* Teleport Home: This functions the same as the Teleport option in the menu bar.&lt;br /&gt;
* Remember: This functions the same as the Teleport option in the menu bar.&lt;br /&gt;
&lt;br /&gt;
== Advanced Information on the Coordinate System==&lt;br /&gt;
From the center of the world, the coordinates increase according to the direction that the person is moving.  For example, the base coordinates can be 0N, or 0 North, and 0E, or 0 East.  If you traveled due north 10 meters, the coordinates would then be 10N, or 10 meters north by 0E. The coordinates are exact, up to two decimal places out.&lt;br /&gt;
&lt;br /&gt;
The center of each world is commonly known as the “Landing Zone”, however, the world owner may choose to move the landing zone to another location. &lt;br /&gt;
&lt;br /&gt;
Because of the way virtual reality works, two additional coordinate points must also be included.  These include the direction the avatar is facing and the location vertically of the avatar.  The location vertically of the avatar is represented with an “a”, immediately following the north/south and east/west coordinates.  The direction the avatar is facing is represented by degrees between 0 and 360.&lt;br /&gt;
&lt;br /&gt;
As an example, the initial coordinates of an avatar could be seen as “0N 0E 0a 0”.  This would place the avatar facing north at the exact central point of the world.  If the avatar moved north by 10 meters, flew up 10 meters, and faced south, this would then read as “10N 0E 10a 90”.&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Teleports&amp;diff=209</id>
		<title>Teleports</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Teleports&amp;diff=209"/>
		<updated>2026-01-10T06:39:46Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;==The Coordinate System== Each world within Active Worlds is set up based on the real world.  Locations in the real world can be found by using GPS coordinates.  The same method is used within Active Worlds.  These virtual GPS coordinates are based on the center of each world.   Your coordinates can be found by clicking “SHOW” in the menu bar and then enabling “Position”.  Your rough coordinates can now be found in the header bar above the menu.  ==Visiting Other...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==The Coordinate System==&lt;br /&gt;
Each world within Active Worlds is set up based on the real world.  Locations in the real world can be found by using GPS coordinates.  The same method is used within Active Worlds.  These virtual GPS coordinates are based on the center of each world. &lt;br /&gt;
&lt;br /&gt;
Your coordinates can be found by clicking “SHOW” in the menu bar and then enabling “Position”.  Your rough coordinates can now be found in the header bar above the menu.&lt;br /&gt;
&lt;br /&gt;
==Visiting Other Areas, Also Known as Teleporting==&lt;br /&gt;
While you may wish to walk around to visit different areas, in many worlds, this can be very time-consuming.  For example, the world “AW”, also known as Alpha World, is larger than the U.S. State of California.  Imagine trying to walk from one end of the state to the other.&lt;br /&gt;
&lt;br /&gt;
An easier way of moving about is to “teleport”.  Teleporting uses the World Coordinate System to move you from one location to another, similar to finding GPS locations on a map.&lt;br /&gt;
&lt;br /&gt;
* To teleport to a specific location, select Teleport in the menu, and then click on To…  This will bring up a box that includes two fields named World and Teleport.  The world field is the world that you want to teleport to.  This matches the world name in the Worlds Tab.  The Coordinates field is the “GPS” locations that you want to teleport to.  Both fields must be completed in order to teleport.  The “teleport” field must have a North/South designation and an East/West designation. Once the fields are entered, press OK to teleport to that location.&lt;br /&gt;
* To teleport forward, select Forward in the teleport menu.  This only works if you have teleported back from a previous location.  You can also use the Teleport Forward icon located on the toolbar.&lt;br /&gt;
* To teleport back to a previous location, select Back in the teleport menu. You can also use the Teleport Back icon located on the toolbar.&lt;br /&gt;
* To teleport to your home location, select Home in the teleport menu. You can also use the Home icon located on the toolbar.&lt;br /&gt;
* To set a new location as your starting location, select Make This My Home in the teleport menu.  This will create a new starting location for you when you enter the Active Worlds browser.&lt;br /&gt;
* To remember a location, select Remember.  This is essentially the same as bookmarking a website to visit later.  After selecting Remember, a box will appear where you can give the location a name.  Hint: When naming locations, it’s best to be specific.  Leave the world name but add in a descriptive phrase so that you can easily remember what the bookmark was at a later date.&lt;br /&gt;
&lt;br /&gt;
==Accessing Teleports through the Teleport Tab==&lt;br /&gt;
The teleports tab is similar to your web browsers bookmark menu.  All of the teleports that you have saved using the “Remember” function are stored in the teleport tab in a list.  To visit a saved teleport, simply click on the name of the teleport.  In addition, several actions can be taken inside of the tab box.  These actions include:&lt;br /&gt;
&lt;br /&gt;
*Rename: Change the name of a teleport by right-clicking on them and then selecting “Rename”.&lt;br /&gt;
* Delete: Delete a teleport by right-clicking on the teleport and selecting “Delete”.&lt;br /&gt;
* Teleport: This functions the same as the Teleport option in the menu bar.&lt;br /&gt;
* Teleport Back: This functions the same as the Teleport option in the menu bar.&lt;br /&gt;
* Teleport Home: This functions the same as the Teleport option in the menu bar.&lt;br /&gt;
* Remember: This functions the same as the Teleport option in the menu bar.&lt;br /&gt;
&lt;br /&gt;
== Advanced Information on the Coordinate System==&lt;br /&gt;
From the center of the world, the coordinates increase according to the direction that the person is moving.  For example, the base coordinates can be 0N, or 0 North, and 0E, or 0 East.  If you traveled due north 10 meters, the coordinates would then be 10N, or 10 meters north by 0E. The coordinates are exact, up to two decimal places out.&lt;br /&gt;
&lt;br /&gt;
The center of each world is commonly known as the “Landing Zone”, however, the world owner may choose to move the landing zone to another location. &lt;br /&gt;
&lt;br /&gt;
Because of the way virtual reality works, two additional coordinate points must also be included.  These include the direction the avatar is facing and the location vertically of the avatar.  The location vertically of the avatar is represented with an “a”, immediately following the north/south and east/west coordinates.  The direction the avatar is facing is represented by degrees between 0 and 360.&lt;br /&gt;
&lt;br /&gt;
As an example, the initial coordinates of an avatar could be seen as “0N 0E 0a 0”.  This would place the avatar facing north at the exact central point of the world.  If the avatar moved north by 10 meters, flew up 10 meters, and faced south, this would then read as “10N 0E 10a 90”.&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Touch_Devices&amp;diff=208</id>
		<title>Touch Devices</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Touch_Devices&amp;diff=208"/>
		<updated>2026-01-10T06:38:35Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
{{TOCright|clear=right}}&lt;br /&gt;
Touch and Pen Controls | Mobile Devices&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DeltaWorlds client browser version 6.2.0.1410 and later support Touch and Pen Controls, in particular useful for Mobile Devices such as smart phones and tablets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Touch Gestures==&lt;br /&gt;
&lt;br /&gt;
[[File:TouchGesturesOverview1.png]]&lt;br /&gt;
&lt;br /&gt;
DeltaWorlds uses &#039;&#039;Tap/Double Tap&#039;&#039;, &#039;&#039;Panning&#039;&#039;, &#039;&#039;Selection/Drag&#039;&#039;, &#039;&#039;Press and Tap&#039;&#039;, &#039;&#039;Zoom&#039;&#039;, and &#039;&#039;Press and Hold&#039;&#039; gestures.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Tap===&lt;br /&gt;
&lt;br /&gt;
====Click====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tapping&#039;&#039; onto the screen triggers a single click, used to select from menu, activate an item of a list, change input focus, activate an action in world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Double Click====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tapping&#039;&#039; onto the 3D window twice quick triggers a double click, e.g. used cancel an ongoing action, such as object selection, terrain selection, or mouse-move modes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Right Click====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Press and Hold&#039;&#039; gesture triggers a right click event, e.g. used to open context menus, to select an object, or pick terrain in world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Look around===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Pan&#039;&#039; gestures are used to look around while &#039;&#039;mouse move mode&#039;&#039; (mouse icon in the toolbar) is deactivated.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen upwards is equal to look up.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen downwards is equal to look down.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen to the left is equal to turn left.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen to the right is equal to turn right.&lt;br /&gt;
&lt;br /&gt;
Combinations of these while keeping the finger pressed are possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Move around===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Pan&#039;&#039; gestures are used to move around while &#039;&#039;mouse move mode&#039;&#039; (mouse icon in the toolbar) is activated.&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;freelook&#039;&#039; was selected in the option settings, the behavior is the same as &#039;&#039;Look around&#039;&#039;. Thus, &#039;&#039;freelook&#039;&#039; makes little sense for touch devices, default is freelook disabled. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen upwards moves the avatar forward.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen downwards moves the avatar backward.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen to the left moves the avatar to the left.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen to the right  moves the avatar to the right.&lt;br /&gt;
&lt;br /&gt;
Combinations of these while keeping the finger pressed are possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flying===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Press and Tap&#039;&#039; gestures are used to fly up and down.&lt;br /&gt;
&lt;br /&gt;
Press first finger to any point on the 3D window, tap second finger above the position of the first finger to fly up. Release fingers to stop flying up.&lt;br /&gt;
&lt;br /&gt;
Press first finger to any point on the 3D window, tap second finger below the position of the first finger to fly down. Release fingers to stop flying down.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zoom Avatar===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zoom&#039;&#039; gestures are used to adjust the view distance to your avatar in world in 3rd person view.&lt;br /&gt;
&lt;br /&gt;
The zoom gesture is sensitive and inertia is applied. The y-distance between fingers is used. Zoom slowly and hold both fingers down for a second.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web===&lt;br /&gt;
&lt;br /&gt;
The integrated web browser supports all touch gestures, for docking web windows and for external web windows, as well as for popups.&lt;br /&gt;
&lt;br /&gt;
Web rendered on panels in world, accept tap and pan gestures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Virtual Keyboard==&lt;br /&gt;
&lt;br /&gt;
[[File:VirtualKeyboard1.png|640px]]&lt;br /&gt;
&lt;br /&gt;
Windows devices on touch devices show an icon to the [http://windows.microsoft.com/en-US/windows-8/type-with-the-on-screen-keyboard  virtual keyboard] in the task bar by default. It offers various options and styles, including handwriting.&lt;br /&gt;
&lt;br /&gt;
It is particular useful to enter chat text, or action commands during building, as well as all modifier keys like Ctrl or Shift are available, useful to speed up move or to pass through objects. ActiveWorlds does not open the virtual keyboard automatically since it can use most of the screen space and thereby may cover the target field where you want to enter text into.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Alternative Input Methods==&lt;br /&gt;
&lt;br /&gt;
Alternative text input methods, like Microsoft&#039;s speech recognition that comes with Windows 7 and later, can be used for ActiveWorlds as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Screen Orientation==&lt;br /&gt;
&lt;br /&gt;
Most Mobile devices offer the feature to switch screen orientation by rotating the device. ActiveWorlds detects changes in screen orientation and will adjust itself to either landscape or portrait mode and switches back to maximized window.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Touch/Pen Requirements==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Required OS:&#039;&#039; Windows 7 or later&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Required CPU:&#039;&#039; Intel x86 or x64 or compatible – i.e. Intel Core, Intel ATOM, AMD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example Mobile Devices==&lt;br /&gt;
(excerpt, as of December 2014)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Acer&#039;&#039; Aspire Switch (various), Iconia (various)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ASUS&#039;&#039; VivoTab (various), Transformer Book (various)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Dell&#039;&#039; Venue 8 Pro, Inspiron 11 3000,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HP&#039;&#039; Stream 7/8, ENVY 15 x2, Pavilion x360 Series, Pavilion 10/13 x2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Lenovo&#039;&#039; Miix 3, Yoga 3 Pro&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Microsoft&#039;&#039; Surface Pro 2, Surface Pro 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toshiba&#039;&#039; Encore 2 (various), Encore Mini, Satellite Click 2 Pro&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;... and many more ...&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Touch_Devices&amp;diff=207</id>
		<title>Touch Devices</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Touch_Devices&amp;diff=207"/>
		<updated>2026-01-10T06:37:58Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;__NOEDITSECTION__ {{TOCright|clear=right}} Touch and Pen Controls | Mobile Devices&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;  ActiveWorlds client browser version 6.2.0.1410 and later support Touch and Pen Controls, in particular useful for Mobile Devices such as smart phones and tablets.   ==Touch Gestures==  File:TouchGesturesOverview1.png  ActiveWorlds uses &amp;#039;&amp;#039;Tap/Double Tap&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Panning&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Selection/Drag&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Press and Tap&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Zoom&amp;#039;&amp;#039;, and &amp;#039;&amp;#039;Press and Hold&amp;#039;&amp;#039; gestures.  &amp;lt;br&amp;gt; ===Tap===  ====Click=...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
{{TOCright|clear=right}}&lt;br /&gt;
Touch and Pen Controls | Mobile Devices&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ActiveWorlds client browser version 6.2.0.1410 and later support Touch and Pen Controls, in particular useful for Mobile Devices such as smart phones and tablets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Touch Gestures==&lt;br /&gt;
&lt;br /&gt;
[[File:TouchGesturesOverview1.png]]&lt;br /&gt;
&lt;br /&gt;
ActiveWorlds uses &#039;&#039;Tap/Double Tap&#039;&#039;, &#039;&#039;Panning&#039;&#039;, &#039;&#039;Selection/Drag&#039;&#039;, &#039;&#039;Press and Tap&#039;&#039;, &#039;&#039;Zoom&#039;&#039;, and &#039;&#039;Press and Hold&#039;&#039; gestures.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Tap===&lt;br /&gt;
&lt;br /&gt;
====Click====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tapping&#039;&#039; onto the screen triggers a single click, used to select from menu, activate an item of a list, change input focus, activate an action in world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Double Click====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Tapping&#039;&#039; onto the 3D window twice quick triggers a double click, e.g. used cancel an ongoing action, such as object selection, terrain selection, or mouse-move modes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Right Click====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Press and Hold&#039;&#039; gesture triggers a right click event, e.g. used to open context menus, to select an object, or pick terrain in world.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Look around===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Pan&#039;&#039; gestures are used to look around while &#039;&#039;mouse move mode&#039;&#039; (mouse icon in the toolbar) is deactivated.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen upwards is equal to look up.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen downwards is equal to look down.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen to the left is equal to turn left.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen to the right is equal to turn right.&lt;br /&gt;
&lt;br /&gt;
Combinations of these while keeping the finger pressed are possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Move around===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Pan&#039;&#039; gestures are used to move around while &#039;&#039;mouse move mode&#039;&#039; (mouse icon in the toolbar) is activated.&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;freelook&#039;&#039; was selected in the option settings, the behavior is the same as &#039;&#039;Look around&#039;&#039;. Thus, &#039;&#039;freelook&#039;&#039; makes little sense for touch devices, default is freelook disabled. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen upwards moves the avatar forward.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen downwards moves the avatar backward.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen to the left moves the avatar to the left.&lt;br /&gt;
&lt;br /&gt;
Moving the finger from the center of the screen to the right  moves the avatar to the right.&lt;br /&gt;
&lt;br /&gt;
Combinations of these while keeping the finger pressed are possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Flying===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Press and Tap&#039;&#039; gestures are used to fly up and down.&lt;br /&gt;
&lt;br /&gt;
Press first finger to any point on the 3D window, tap second finger above the position of the first finger to fly up. Release fingers to stop flying up.&lt;br /&gt;
&lt;br /&gt;
Press first finger to any point on the 3D window, tap second finger below the position of the first finger to fly down. Release fingers to stop flying down.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zoom Avatar===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Zoom&#039;&#039; gestures are used to adjust the view distance to your avatar in world in 3rd person view.&lt;br /&gt;
&lt;br /&gt;
The zoom gesture is sensitive and inertia is applied. The y-distance between fingers is used. Zoom slowly and hold both fingers down for a second.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Web===&lt;br /&gt;
&lt;br /&gt;
The integrated web browser supports all touch gestures, for docking web windows and for external web windows, as well as for popups.&lt;br /&gt;
&lt;br /&gt;
Web rendered on panels in world, accept tap and pan gestures.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Virtual Keyboard==&lt;br /&gt;
&lt;br /&gt;
[[File:VirtualKeyboard1.png|640px]]&lt;br /&gt;
&lt;br /&gt;
Windows devices on touch devices show an icon to the [http://windows.microsoft.com/en-US/windows-8/type-with-the-on-screen-keyboard  virtual keyboard] in the task bar by default. It offers various options and styles, including handwriting.&lt;br /&gt;
&lt;br /&gt;
It is particular useful to enter chat text, or action commands during building, as well as all modifier keys like Ctrl or Shift are available, useful to speed up move or to pass through objects. ActiveWorlds does not open the virtual keyboard automatically since it can use most of the screen space and thereby may cover the target field where you want to enter text into.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Alternative Input Methods==&lt;br /&gt;
&lt;br /&gt;
Alternative text input methods, like Microsoft&#039;s speech recognition that comes with Windows 7 and later, can be used for ActiveWorlds as well.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Screen Orientation==&lt;br /&gt;
&lt;br /&gt;
Most Mobile devices offer the feature to switch screen orientation by rotating the device. ActiveWorlds detects changes in screen orientation and will adjust itself to either landscape or portrait mode and switches back to maximized window.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Touch/Pen Requirements==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Required OS:&#039;&#039; Windows 7 or later&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Required CPU:&#039;&#039; Intel x86 or x64 or compatible – i.e. Intel Core, Intel ATOM, AMD&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example Mobile Devices==&lt;br /&gt;
(excerpt, as of December 2014)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Acer&#039;&#039; Aspire Switch (various), Iconia (various)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ASUS&#039;&#039; VivoTab (various), Transformer Book (various)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Dell&#039;&#039; Venue 8 Pro, Inspiron 11 3000,&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HP&#039;&#039; Stream 7/8, ENVY 15 x2, Pavilion x360 Series, Pavilion 10/13 x2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Lenovo&#039;&#039; Miix 3, Yoga 3 Pro&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Microsoft&#039;&#039; Surface Pro 2, Surface Pro 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Toshiba&#039;&#039; Encore 2 (various), Encore Mini, Satellite Click 2 Pro&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;... and many more ...&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Moving_Around&amp;diff=206</id>
		<title>Moving Around</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Moving_Around&amp;diff=206"/>
		<updated>2026-01-10T06:36:35Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Beginner Keyboard Commands ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After arriving in-world, you’ll want to begin exploring the world.  This is done by using your keyboard. The following common movement controls are set as the default keys:&lt;br /&gt;
&lt;br /&gt;
* Up Arrow: Walk forward&lt;br /&gt;
* Down Arrow: Walk backward&lt;br /&gt;
* Left Arrow: Turn Left&lt;br /&gt;
* Right Arrow: Turn Right&lt;br /&gt;
* Plus (+) symbol: Fly up&lt;br /&gt;
* Minus (-) symbol: Fly down&lt;br /&gt;
* Swimming begins automatically when you enter the water.&lt;br /&gt;
* Left mouse click: Activates an object.  Objects can be activated when the mouse cursor turns to a hand.&lt;br /&gt;
* TAB: Quickly switch from the 3D view window to the chat box.&lt;br /&gt;
&lt;br /&gt;
In addition to the basic movement keys, other keys will help you look around.  These include:&lt;br /&gt;
&lt;br /&gt;
*Page Up (PGUP): Look Up&lt;br /&gt;
*Page Down (PGDN): Look Down&lt;br /&gt;
*END key: Cycles through the various views, including first-person, chase (locked), chase, and front view.  The chase views are the same thing as third person views.&lt;br /&gt;
*HOME key: Resets your view to first-person.&lt;br /&gt;
* * Key: Zooms in on your avatar.&lt;br /&gt;
* / Key: Zooms out on your avatar.&lt;br /&gt;
&lt;br /&gt;
=== Intermediate Keyboard Commands ===&lt;br /&gt;
&lt;br /&gt;
After learning the basic commands, there are a few key combinations that are commonly used throughout the software.  These include:&lt;br /&gt;
&lt;br /&gt;
* Shift + Up/Down: Using the Shift key while moving allows you to pass through objects.  This is helpful if you get stuck inside of a model.&lt;br /&gt;
* Shift + Left/Right: Using the Shift key while pressing left or right will allow you to move sideways, or sidestep.&lt;br /&gt;
* Control (CTRL) + Up/Down: Using the Control key allows you to run at a faster pace.&lt;br /&gt;
&lt;br /&gt;
== Advanced Movements ==&lt;br /&gt;
&lt;br /&gt;
* Jumping: Although this is considered a basic movement, it is not pre-defined as such.  To enable jumping, you must set a button in the Configure Controls box to use for jump.  Typically, users set this to either the space bar or the 0/Ins key on the keypad.  To jump, press this button.  To jump higher, run forward while pressing this button.  Many games in the Active Worlds universe use the jump button.&lt;br /&gt;
* Autowalk: The autowalk keys must be defined in the Configure Controls box as mentioned above.  Autowalk enables your avatar to move without having to hold down the forward or backward keys.  There are two keys that have to be defined:&lt;br /&gt;
* The Autowalk Key: This key begins automatic movement.  To use this, hold down the up key and press the Autowalk key at the same time.&lt;br /&gt;
* The Stop Key: This key stops the automatic movement.&lt;br /&gt;
&lt;br /&gt;
== Configuring the Controls ==&lt;br /&gt;
With most things in Active Worlds, the keyboard controls can be modified.  To modify the keyboard controls, select Options in the menu bar, and then select Configure Controls.&lt;br /&gt;
&lt;br /&gt;
Many gamers are used to using WASD type controls.  These are also referred to as “Laptop” controls.  To enable WASD, select the option “Reset to Laptop/Gaming defaults”.&lt;br /&gt;
&lt;br /&gt;
The Keyboard Controls box allows you to change your keyboard layout.  The first column defines the actions that can are possible.  The second column is the first set of keys, and the third column is the second set of keys.  To change your keyboard options, click on the button beside the actions you want to change.  The buttons can also be mapped to a mouse, joystick, or game controller buttons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
Mouse movement: Many gamers are used to using the mouse to move around.  This can easily be done within Active Worlds.  To use the mouse to move around, first select your view by pressing the END key multiple times.  Mouse movement is best used in the Chase, or Third Person view. Once you have your view selected, press and release the middle mouse button, or scroll wheel.  You will see a white dot in the center of your screen.  This is the focal point for the movement.  With this, you can then use your mouse to look around while using the arrow keys (or WASD keys) to move around.&lt;br /&gt;
&lt;br /&gt;
* Mouse Movement, Autowalk, and Running: To activate this key sequence is a little more complicated than simply walking forward.  The steps involved are as follows:&lt;br /&gt;
** To walk normally: Switch your view to what is desired by pressing the END key on your keyboard, then, press the middle mouse button (scroll wheel) to enable mouse movement, then, press the Up arrow key to begin moving forward, then, while holding down the Up arrow key, press the Autowalk key that you defined to begin autowalk.&lt;br /&gt;
** To run: Switch your view to what is desired by pressing the END key on your keyboard, then, press the middle mouse button (scroll wheel) to enable mouse movement, then, hold down the Control Key while pressing the Up arrow key to begin moving forward, then, while holding down the Up arrow key, press the Autowalk key that you defined to begin autowalk.&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Moving_Around&amp;diff=205</id>
		<title>Moving Around</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Moving_Around&amp;diff=205"/>
		<updated>2026-01-10T06:35:57Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot; == Keyboard == == Flying == === Beginner Keyboard Commands ===   After arriving in-world, you’ll want to begin exploring the world.  This is done by using your keyboard. The following common movement controls are set as the default keys:  * Up Arrow: Walk forward * Down Arrow: Walk backward * Left Arrow: Turn Left * Right Arrow: Turn Right * Plus (+) symbol: Fly up * Minus (-) symbol: Fly down * Swimming begins automatically when you enter the water. * Left mouse clic...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Keyboard ==&lt;br /&gt;
== Flying ==&lt;br /&gt;
=== Beginner Keyboard Commands ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After arriving in-world, you’ll want to begin exploring the world.  This is done by using your keyboard. The following common movement controls are set as the default keys:&lt;br /&gt;
&lt;br /&gt;
* Up Arrow: Walk forward&lt;br /&gt;
* Down Arrow: Walk backward&lt;br /&gt;
* Left Arrow: Turn Left&lt;br /&gt;
* Right Arrow: Turn Right&lt;br /&gt;
* Plus (+) symbol: Fly up&lt;br /&gt;
* Minus (-) symbol: Fly down&lt;br /&gt;
* Swimming begins automatically when you enter the water.&lt;br /&gt;
* Left mouse click: Activates an object.  Objects can be activated when the mouse cursor turns to a hand.&lt;br /&gt;
* TAB: Quickly switch from the 3D view window to the chat box.&lt;br /&gt;
&lt;br /&gt;
In addition to the basic movement keys, other keys will help you look around.  These include:&lt;br /&gt;
&lt;br /&gt;
*Page Up (PGUP): Look Up&lt;br /&gt;
*Page Down (PGDN): Look Down&lt;br /&gt;
*END key: Cycles through the various views, including first-person, chase (locked), chase, and front view.  The chase views are the same thing as third person views.&lt;br /&gt;
*HOME key: Resets your view to first-person.&lt;br /&gt;
* * Key: Zooms in on your avatar.&lt;br /&gt;
* / Key: Zooms out on your avatar.&lt;br /&gt;
&lt;br /&gt;
=== Intermediate Keyboard Commands ===&lt;br /&gt;
&lt;br /&gt;
After learning the basic commands, there are a few key combinations that are commonly used throughout the software.  These include:&lt;br /&gt;
&lt;br /&gt;
* Shift + Up/Down: Using the Shift key while moving allows you to pass through objects.  This is helpful if you get stuck inside of a model.&lt;br /&gt;
* Shift + Left/Right: Using the Shift key while pressing left or right will allow you to move sideways, or sidestep.&lt;br /&gt;
* Control (CTRL) + Up/Down: Using the Control key allows you to run at a faster pace.&lt;br /&gt;
&lt;br /&gt;
== Advanced Movements ==&lt;br /&gt;
&lt;br /&gt;
* Jumping: Although this is considered a basic movement, it is not pre-defined as such.  To enable jumping, you must set a button in the Configure Controls box to use for jump.  Typically, users set this to either the space bar or the 0/Ins key on the keypad.  To jump, press this button.  To jump higher, run forward while pressing this button.  Many games in the Active Worlds universe use the jump button.&lt;br /&gt;
* Autowalk: The autowalk keys must be defined in the Configure Controls box as mentioned above.  Autowalk enables your avatar to move without having to hold down the forward or backward keys.  There are two keys that have to be defined:&lt;br /&gt;
* The Autowalk Key: This key begins automatic movement.  To use this, hold down the up key and press the Autowalk key at the same time.&lt;br /&gt;
* The Stop Key: This key stops the automatic movement.&lt;br /&gt;
&lt;br /&gt;
== Configuring the Controls ==&lt;br /&gt;
With most things in Active Worlds, the keyboard controls can be modified.  To modify the keyboard controls, select Options in the menu bar, and then select Configure Controls.&lt;br /&gt;
&lt;br /&gt;
Many gamers are used to using WASD type controls.  These are also referred to as “Laptop” controls.  To enable WASD, select the option “Reset to Laptop/Gaming defaults”.&lt;br /&gt;
&lt;br /&gt;
The Keyboard Controls box allows you to change your keyboard layout.  The first column defines the actions that can are possible.  The second column is the first set of keys, and the third column is the second set of keys.  To change your keyboard options, click on the button beside the actions you want to change.  The buttons can also be mapped to a mouse, joystick, or game controller buttons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
Mouse movement: Many gamers are used to using the mouse to move around.  This can easily be done within Active Worlds.  To use the mouse to move around, first select your view by pressing the END key multiple times.  Mouse movement is best used in the Chase, or Third Person view. Once you have your view selected, press and release the middle mouse button, or scroll wheel.  You will see a white dot in the center of your screen.  This is the focal point for the movement.  With this, you can then use your mouse to look around while using the arrow keys (or WASD keys) to move around.&lt;br /&gt;
&lt;br /&gt;
* Mouse Movement, Autowalk, and Running: To activate this key sequence is a little more complicated than simply walking forward.  The steps involved are as follows:&lt;br /&gt;
** To walk normally: Switch your view to what is desired by pressing the END key on your keyboard, then, press the middle mouse button (scroll wheel) to enable mouse movement, then, press the Up arrow key to begin moving forward, then, while holding down the Up arrow key, press the Autowalk key that you defined to begin autowalk.&lt;br /&gt;
** To run: Switch your view to what is desired by pressing the END key on your keyboard, then, press the middle mouse button (scroll wheel) to enable mouse movement, then, hold down the Control Key while pressing the Up arrow key to begin moving forward, then, while holding down the Up arrow key, press the Autowalk key that you defined to begin autowalk.&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Category:SDK&amp;diff=204</id>
		<title>Category:SDK</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Category:SDK&amp;diff=204"/>
		<updated>2025-04-07T19:29:12Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;Meta category holding all documentation related to the SDK. No SDK method or property articles should be categorized in here.  Category:Software&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Meta category holding all documentation related to the [[SDK]]. No SDK method or property articles should be categorized in here.&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=AW_AVATAR_SESSION&amp;diff=203</id>
		<title>AW AVATAR SESSION</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=AW_AVATAR_SESSION&amp;diff=203"/>
		<updated>2025-04-07T19:28:23Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{SDK added in|version=2.1|sort=a|sdk=13|world=|universe=|browser=}}  __NOTOC__   {{SUBPAGENAMEE}}  ==Type== Integer (read only)  ==Description== Session number of a user for which an event or callback was triggered (mostly avatar-related).  ==Notes== Every user is assigned a unique session number at login. This session number can be used by SDK applications to track individual users as they move around the scene.  Note that a new session number is assigned on every logi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SDK added in|version=2.1|sort=a|sdk=13|world=|universe=|browser=}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 {{SUBPAGENAMEE}}&lt;br /&gt;
&lt;br /&gt;
==Type==&lt;br /&gt;
Integer (read only)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Session number of a user for which an event or callback was triggered (mostly avatar-related).&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
Every user is assigned a unique session number at login. This session number can be used by SDK applications to track individual users as they move around the scene.&lt;br /&gt;
&lt;br /&gt;
Note that a new session number is assigned on every login. This means that for example if a user exits and then re-enters then it will appear with a new session number even though its the same user as before. Changing privileges will also cause a relogin, meaning that the assigned session number will change.&lt;br /&gt;
&lt;br /&gt;
==Range==&lt;br /&gt;
{{SDK range|minimum=1|maximum=65335|default=}}&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
 void handle_avatar_add (void)&lt;br /&gt;
 {&lt;br /&gt;
   printf (&amp;quot;%s has session number %d\n&amp;quot;,&lt;br /&gt;
           [[aw_string]] ([[AW_AVATAR_NAME]]),&lt;br /&gt;
           [[aw_int]] ([[AW_AVATAR_SESSION]]));&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 [[aw_event_set]] ([[AW_EVENT_AVATAR_ADD]], handle_avatar_add);&lt;br /&gt;
&lt;br /&gt;
==Used by==&lt;br /&gt;
*[[AW_CALLBACK_ADDRESS]]&lt;br /&gt;
*[[AW_CALLBACK_AVATAR_LOCATION]]&lt;br /&gt;
*[[AW_EVENT_AVATAR_ADD]]&lt;br /&gt;
*[[AW_EVENT_AVATAR_CHANGE]]&lt;br /&gt;
*[[AW_EVENT_AVATAR_CLICK]]&lt;br /&gt;
*[[AW_EVENT_AVATAR_DELETE]]&lt;br /&gt;
*[[AW_EVENT_AVATAR_RELOAD]]&lt;br /&gt;
*[[AW_EVENT_ENTITY_RIDER_ADD]]&lt;br /&gt;
*[[AW_EVENT_ENTITY_RIDER_CHANGE]]&lt;br /&gt;
*[[AW_EVENT_ENTITY_RIDER_DELETE]]&lt;br /&gt;
*[[AW_EVENT_OBJECT_BUMP]]&lt;br /&gt;
*[[AW_EVENT_OBJECT_CLICK]]&lt;br /&gt;
*[[AW_EVENT_OBJECT_SELECT]]&lt;br /&gt;
*[[AW_EVENT_URL]]&lt;br /&gt;
*[[AW_EVENT_URL_CLICK]]&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[aw_address]]&lt;br /&gt;
*[[aw_avatar_set]]&lt;br /&gt;
*[[aw_url_click]]&lt;br /&gt;
*[[aw_url_send]]&lt;br /&gt;
*[[aw_avatar_location]]&lt;br /&gt;
*[[aw_avatar_reload]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK Attributes|A]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=AW_CALLBACK_ADDRESS&amp;diff=202</id>
		<title>AW CALLBACK ADDRESS</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=AW_CALLBACK_ADDRESS&amp;diff=202"/>
		<updated>2025-04-07T19:28:07Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{SDK added in|version=2.2|sdk=14|world=21|universe=|browser=303}}  __NOTOC__   {{SUBPAGENAMEE}}  ==Attributes== ;AW_AVATAR_SESSION:Queried session number; this is useful for determining which callback is for which request if multiple asynchronous calls to aw_address are outstanding. ;AW_AVATAR_ADDRESS (1):Specifies the IP address of the user, in network byte order.  &amp;#039;&amp;#039;&amp;#039;(1)&amp;#039;&amp;#039;&amp;#039; If the reason code is RC_SUCCESS.  ==Used by== *a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SDK added in|version=2.2|sdk=14|world=21|universe=|browser=303}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 {{SUBPAGENAMEE}}&lt;br /&gt;
&lt;br /&gt;
==Attributes==&lt;br /&gt;
;[[AW_AVATAR_SESSION]]:Queried session number; this is useful for determining which callback is for which request if multiple asynchronous calls to [[aw_address]] are outstanding.&lt;br /&gt;
;[[AW_AVATAR_ADDRESS]] (1):Specifies the IP address of the user, in network byte order.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(1)&#039;&#039;&#039; If the reason code is [[SDK Reason Codes#RC_SUCCESS|RC_SUCCESS]].&lt;br /&gt;
&lt;br /&gt;
==Used by==&lt;br /&gt;
*[[aw_address]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK Callbacks|A]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Aw_wait&amp;diff=201</id>
		<title>Aw wait</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Aw_wait&amp;diff=201"/>
		<updated>2025-04-07T19:27:37Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{SDK added in|version=2.1|sdk=13|world=|universe=|browser=}}  __NOTOC__   int aw_wait (int &amp;lt;var&amp;gt;milliseconds&amp;lt;/var&amp;gt;)  ==Description== Processes all queued packets and waits the specified time for more to arrive, calling callback and event handlers.  ==Callback== None  ==Notes== Placing calls to this method from callback or event handlers should be avoided. The reason for this being that it will in turn call such handlers. Which would cause aw_wait to indirectly call itse...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SDK added in|version=2.1|sdk=13|world=|universe=|browser=}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 int aw_wait (int &amp;lt;var&amp;gt;milliseconds&amp;lt;/var&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Processes all queued packets and waits the specified time for more to arrive, calling callback and event handlers.&lt;br /&gt;
&lt;br /&gt;
==Callback==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
Placing calls to this method from callback or event handlers should be avoided. The reason for this being that it will in turn call such handlers. Which would cause aw_wait to indirectly call itself (e.g. aw_wait calls handler, handler calls aw_wait, repeat).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For version 4.1 and later:&#039;&#039;&#039; This method will deallocate [[SDK_Multiple_Instances|instances]] that have been flagged as destroyed by [[aw_destroy]]. This is done before each iteration of processing packets for all the instances. If an application places a call to [[aw_destroy]] followed by aw_wait within a callback or event handler then it could cause the SDK to dereference a pointer to freed memory.&lt;br /&gt;
&lt;br /&gt;
===Blocking calls===&lt;br /&gt;
It helps to think of blocking calls to SDK methods as placing an implicit call to aw_wait. That is, calls that have a callback but none has been registered. A blocking call will process all packets until it receives the result. This includes packets bound for other instances. The majority of these methods look like this:&lt;br /&gt;
&lt;br /&gt;
 int [[aw_address]] (int session_id)&lt;br /&gt;
 {&lt;br /&gt;
   /* check if RC_NOT_INITIALIZED, RC_NO_INSTANCE or RC_NO_CONNECTION should be returned */&lt;br /&gt;
   ...&lt;br /&gt;
 &lt;br /&gt;
   /* send PACKET_GET_ADDRESS to the world server */&lt;br /&gt;
   ...&lt;br /&gt;
 &lt;br /&gt;
   /* &lt;br /&gt;
      if this is an asynchronous call then immediately return RC_SUCCESS indicating&lt;br /&gt;
      that the request has been _sent_ successfully.&lt;br /&gt;
   */&lt;br /&gt;
   if ([[aw_callback]] ([[AW_CALLBACK_ADDRESS]]) != NULL)&lt;br /&gt;
     return RC_SUCCESS;&lt;br /&gt;
 &lt;br /&gt;
   /*&lt;br /&gt;
      wait at most 18 seconds (or return RC_TIMEOUT) for a result to PACKET_ADDRESS to come&lt;br /&gt;
      in for the current instance processing all packets in the meantime, calling event and&lt;br /&gt;
      callback handlers.&lt;br /&gt;
   */&lt;br /&gt;
   return _aw_wait (18000, PACKET_ADDRESS); &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
That blocking SDK methods can call event and callback handlers has implications. &#039;&#039;&#039;The rule of thumb is:&#039;&#039;&#039; Never place blocking SDK method calls in an event or callback handler. It requires in-depth knowledge to know when this is safe.&lt;br /&gt;
&lt;br /&gt;
For example, assume that a blocking call has been placed from within an event handler. If the event is triggered multiple times while the blocking call waits for a result then it will lead to the following problems:&lt;br /&gt;
&lt;br /&gt;
Problem #1:&lt;br /&gt;
:The first blocking call would call the event handler, which places a second blocking call. The second call must return before the first one can return. It is possible that the event is received again while the second call waits, which places a third blocking call. The third call must return before the second one can return. If more events than results are received then the call depth will increase.&lt;br /&gt;
&lt;br /&gt;
Problem #2:&lt;br /&gt;
:Assume that problem #1 occurs and leads to a big call depth. If less events than results are received then the call depth will decrease. There might be calls that will time-out due to having waited more than 18 seconds.&lt;br /&gt;
&lt;br /&gt;
Problem #3:&lt;br /&gt;
:Results will arrive in the same order that calls were placed. If there are multiple blocking calls waiting for results then the most recent call will receive the oldest result. &lt;br /&gt;
&lt;br /&gt;
==Arguments==&lt;br /&gt;
&#039;&#039;&#039;If &amp;lt;var&amp;gt;milliseconds&amp;lt;/var&amp;gt; is 0&#039;&#039;&#039; then it will process any queued packets and return. This is typically used in single-threaded GUI applications. Where a timer is used to call this method repeatedly. A wait of around 100 ms (1000 / AW_MAX_AVCHANGE_PER_SECOND) or less between each call is recommended. See [http://msdn2.microsoft.com/en-us/library/ms644906.aspx SetTimer] for Windows applications.&lt;br /&gt;
&lt;br /&gt;
 void CALLBACK TimerProc (&lt;br /&gt;
     HWND hWnd,      // handle of window for timer messages&lt;br /&gt;
     UINT nMsg,      // WM_TIMER message&lt;br /&gt;
     UINT nIDEvent,  // timer identification&lt;br /&gt;
     DWORD dwTime)   // current system time&lt;br /&gt;
 {&lt;br /&gt;
   [[aw_wait]] (0); /* process any queued packets and return */&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /* put this together with the rest of the intialization code */&lt;br /&gt;
 [[aw_init]] (AW_BUILD);&lt;br /&gt;
 SetTimer (NULL, 0, 100, TimerProc); /* call aw_wait at 100 millisecond intervals */&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If &amp;lt;var&amp;gt;milliseconds&amp;lt;/var&amp;gt; is less than 0&#039;&#039;&#039; then it will keep processing packets forever (or until [[aw_term]] is called, which is not recommended). This is typically used in simple console applications. Where any input comes through the SDK. In the form of events like [[AW_EVENT_CHAT|chat]], [[AW_EVENT_OBJECT_CLICK|object clicks]], and so forth.&lt;br /&gt;
&lt;br /&gt;
 [[aw_wait]] (-1); /* this will never return */&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If &amp;lt;var&amp;gt;milliseconds&amp;lt;/var&amp;gt; is more than 0&#039;&#039;&#039; then it will process packets until it that amount of time has passed (or until [[aw_term]] is called, which is not recommended). This makes it possible to periodically check for input from a user. Or to perform an action at certain intervals. For example, use [[aw_say]] to say something out loud every minute. Like this,&lt;br /&gt;
&lt;br /&gt;
 /* say &amp;quot;A minute has passed&amp;quot; every minute */&lt;br /&gt;
 while (1)&lt;br /&gt;
 {&lt;br /&gt;
   [[aw_wait]] (60000); /* wait 60,000 milliseconds, or 60 seconds */&lt;br /&gt;
   [[aw_say]] (&amp;quot;A minute has passed&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This example checks for keyboard input at 100 millisecond intervals:&lt;br /&gt;
&lt;br /&gt;
 while (1)&lt;br /&gt;
 {&lt;br /&gt;
   [[aw_wait]] (100); /* wait 100 milliseconds */&lt;br /&gt;
   if (_kbhit ())&lt;br /&gt;
   {&lt;br /&gt;
     int ch = _getch ();&lt;br /&gt;
     &lt;br /&gt;
     /* if &#039;q&#039; was pressed then quit */&lt;br /&gt;
     if (_tolower (ch) == &#039;q&#039;)&lt;br /&gt;
       break;&lt;br /&gt;
     &lt;br /&gt;
     /* if &#039;t&#039; was pressed then print the tick count */&lt;br /&gt;
     if (_tolower (ch) == &#039;t&#039;)&lt;br /&gt;
       printf (&amp;quot;Ticks: %u\n&amp;quot;, [[aw_tick]] ());&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note, if [[aw_init]] has not been called (or [[aw_term]] has been called) then the call will return immediately.&lt;br /&gt;
&lt;br /&gt;
==Argument attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Return values==&lt;br /&gt;
;[[SDK Reason Codes#RC_SUCCESS|RC_SUCCESS]]:&lt;br /&gt;
;[[SDK Reason Codes#RC_NOT_INITIALIZED|RC_NOT_INITIALIZED]]:If the milliseconds argument is 0 and aw_init has not been called (or aw_term has been called). &lt;br /&gt;
&lt;br /&gt;
==Returned attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[SDK_Application_Structure|Application structure]]&lt;br /&gt;
*[[aw_event_set]]&lt;br /&gt;
*[[aw_callback_set]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK Methods|W]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Mover_Control_example_code&amp;diff=200</id>
		<title>Mover Control example code</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Mover_Control_example_code&amp;diff=200"/>
		<updated>2025-04-07T19:26:50Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;&amp;lt;pre&amp;gt; /*-----------------------------------------------------------------------------                             M o v e r   C o n t r o l                       Copyright 2007 Activeworlds Inc           Licensed Material -- Program Property of Activeworlds Inc. -----------------------------------------------------------------------------*/   #define MAX_MODEL_NAME        64 #define WAIT_TIME             10  // time to wait for SDK packets and events before update #defin...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/*-----------------------------------------------------------------------------&lt;br /&gt;
                            M o v e r   C o n t r o l&lt;br /&gt;
                      Copyright 2007 Activeworlds Inc&lt;br /&gt;
          Licensed Material -- Program Property of Activeworlds Inc.&lt;br /&gt;
-----------------------------------------------------------------------------*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define MAX_MODEL_NAME        64&lt;br /&gt;
#define WAIT_TIME             10  // time to wait for SDK packets and events before update&lt;br /&gt;
#define WAYPOINT_RESOLUTION   1   // accuracy, interpolates waypoint (1 to 10) - use as low as possible!&lt;br /&gt;
#define UPDATE_INTERVAL       (1000 / (aw_int (AW_WORLD_AVATAR_REFRESH_RATE) * WAYPOINT_RESOLUTION))&lt;br /&gt;
#define IDLE_INTERVAL         ((aw_int (AW_WORLD_MOVER_USED_RESET_TIMEOUT) * 1000) / 2)&lt;br /&gt;
#define STATE_INVALIDATE      -1  // invalidate mover&#039;s state&lt;br /&gt;
#define MAX_WAYPOINTS         16  // number of elements in &amp;quot;waypoints&amp;quot; array&lt;br /&gt;
&lt;br /&gt;
// announced messages&lt;br /&gt;
#define START_MSG             &amp;quot;Bus started.&amp;quot;&lt;br /&gt;
#define STOP_MSG              &amp;quot;Bus stopped. Please leave the bus.&amp;quot;&lt;br /&gt;
#define READY_MSG             &amp;quot;Passengers are welcome! Bus will start in 15 seconds.&amp;quot;&lt;br /&gt;
#define POSTPONE_MSG          &amp;quot;Tour postponed by 15 seconds. Passengers are welcome!&amp;quot;&lt;br /&gt;
#define RIDER_ADDED_WHISPER   &amp;quot;You joined the bus tour.&amp;quot;&lt;br /&gt;
#define RIDER_DELETED_WHISPER &amp;quot;You left the bus tour.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;aw.h&amp;quot;&lt;br /&gt;
#include &amp;lt;windows.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct {&lt;br /&gt;
  int x;&lt;br /&gt;
  int y;&lt;br /&gt;
  int z;&lt;br /&gt;
  int yaw;&lt;br /&gt;
  int pitch;&lt;br /&gt;
  int roll;&lt;br /&gt;
} waypoints[MAX_WAYPOINTS] = {&lt;br /&gt;
// X      Y     Z     YAW   PITCH ROLL&lt;br /&gt;
  {0,     0,    0,    0,    0,    0},&lt;br /&gt;
  {0,     100,  500,  0,    -16,  32},&lt;br /&gt;
  {500,   400,  1000, 160,  -32,  64},&lt;br /&gt;
  {1000,  300,  1500, 280,  -16,  128},&lt;br /&gt;
  {1500,  200,  2000, 360,  -16,  64},&lt;br /&gt;
  {2000,  0,    2000, 450,  0,    -128},&lt;br /&gt;
  {1000,  200,  2500, -450, -16,  -256},&lt;br /&gt;
  {500,   400,  3000, -300, -16,  -64},&lt;br /&gt;
  {0,     900,  3500, -215, -32,  -32},&lt;br /&gt;
  {0,     400,  4000, 0,    -32,  0},&lt;br /&gt;
  {0,     0,    4200, 0,    -16,  0},&lt;br /&gt;
  {0,     900,  4000, 900,  -180, 180},&lt;br /&gt;
  {500,   1500, 2000, 2400, -360, 360},&lt;br /&gt;
  {-1500, 900,  500,  1200, 180, -90},&lt;br /&gt;
  {-800,  400,  -900, 0,    32,   -32},&lt;br /&gt;
  {0,     0,    0,    0,    0,    0},&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct rider {&lt;br /&gt;
  int           session;&lt;br /&gt;
  struct rider* next;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct mover {&lt;br /&gt;
  unsigned int  id;&lt;br /&gt;
  int           state;&lt;br /&gt;
  int           init_x;&lt;br /&gt;
  int           init_y;&lt;br /&gt;
  int           init_z;&lt;br /&gt;
  int           init_yaw;&lt;br /&gt;
  int           init_pitch;&lt;br /&gt;
  int           init_roll;&lt;br /&gt;
  int           cur_x;&lt;br /&gt;
  int           cur_y;&lt;br /&gt;
  int           cur_z;&lt;br /&gt;
  int           cur_yaw;&lt;br /&gt;
  int           cur_pitch;&lt;br /&gt;
  int           cur_roll;&lt;br /&gt;
  unsigned int  start;&lt;br /&gt;
  unsigned int  last_update;&lt;br /&gt;
  unsigned int  last_move;&lt;br /&gt;
  float         last_waypoint;&lt;br /&gt;
  int           rider_count;&lt;br /&gt;
  struct rider* riders;&lt;br /&gt;
  struct mover* next;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
static  struct mover*   movers      = NULL;&lt;br /&gt;
static  int             mv_owner    = 0;&lt;br /&gt;
static  char            mv_model[MAX_MODEL_NAME];&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void log_msg (char* format, ...)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  va_list  		args;&lt;br /&gt;
  struct tm*            now;&lt;br /&gt;
  time_t                secs;&lt;br /&gt;
  char                  buffer[1024];&lt;br /&gt;
&lt;br /&gt;
  time (&amp;amp;secs);&lt;br /&gt;
  now = localtime (&amp;amp;secs);&lt;br /&gt;
  strftime (buffer, sizeof (buffer), &amp;quot;%y-%m-%d %X &amp;quot;, now);&lt;br /&gt;
  printf (buffer);&lt;br /&gt;
&lt;br /&gt;
  va_start (args, format);&lt;br /&gt;
  __try {&lt;br /&gt;
    vsprintf (buffer, format, args);&lt;br /&gt;
  }&lt;br /&gt;
	__except( EXCEPTION_EXECUTE_HANDLER ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  va_end (args);&lt;br /&gt;
  puts (buffer);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void announce (char* format, ...)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  va_list  		args;&lt;br /&gt;
  char                  buffer[1024];&lt;br /&gt;
&lt;br /&gt;
  va_start (args, format);&lt;br /&gt;
  __try {&lt;br /&gt;
    vsprintf (buffer, format, args);&lt;br /&gt;
  }&lt;br /&gt;
	__except( EXCEPTION_EXECUTE_HANDLER ) {&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
  va_end (args);&lt;br /&gt;
  aw_say (buffer);&lt;br /&gt;
  log_msg (&amp;quot;announce : \&amp;quot;%s\&amp;quot;&amp;quot;, buffer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
BOOL rider_add (unsigned int id, int session)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  struct mover*   mv;&lt;br /&gt;
  struct rider*   rd;&lt;br /&gt;
  BOOL            exists;&lt;br /&gt;
&lt;br /&gt;
  if (session == aw_session ())&lt;br /&gt;
    return TRUE;  // dont add own session&lt;br /&gt;
&lt;br /&gt;
  for (mv = movers; mv; mv = mv-&amp;gt;next)&lt;br /&gt;
    if (mv-&amp;gt;id == id)&lt;br /&gt;
      break;&lt;br /&gt;
  if (!mv)&lt;br /&gt;
    return FALSE;&lt;br /&gt;
&lt;br /&gt;
  for (exists = FALSE, rd = mv-&amp;gt;riders; rd; rd = rd-&amp;gt;next)&lt;br /&gt;
    if (rd-&amp;gt;session == session) {&lt;br /&gt;
      exists = TRUE;&lt;br /&gt;
      break;  // exists already&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  if (!rd&lt;br /&gt;
  &amp;amp;&amp;amp; !(rd = (struct rider*)calloc (1, sizeof (struct rider))))&lt;br /&gt;
    return FALSE;&lt;br /&gt;
&lt;br /&gt;
  rd-&amp;gt;session = session;&lt;br /&gt;
&lt;br /&gt;
  if (!exists) {&lt;br /&gt;
    if (mv-&amp;gt;riders)&lt;br /&gt;
      rd-&amp;gt;next = mv-&amp;gt;riders;&lt;br /&gt;
    mv-&amp;gt;riders = rd;&lt;br /&gt;
    mv-&amp;gt;rider_count++;&lt;br /&gt;
    aw_whisper (session, RIDER_ADDED_WHISPER);&lt;br /&gt;
  }&lt;br /&gt;
  return TRUE;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
BOOL rider_del (unsigned int id, int session)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  struct mover*   mv;&lt;br /&gt;
  struct rider*   rd;&lt;br /&gt;
  struct rider*   prev;&lt;br /&gt;
&lt;br /&gt;
  for (mv = movers; mv; mv = mv-&amp;gt;next)&lt;br /&gt;
    if (mv-&amp;gt;id == id)&lt;br /&gt;
      break;&lt;br /&gt;
  if (!mv)&lt;br /&gt;
    return FALSE; // mover does not exist&lt;br /&gt;
&lt;br /&gt;
  for (prev = NULL, rd = mv-&amp;gt;riders; rd; rd = rd-&amp;gt;next) {&lt;br /&gt;
    if (rd-&amp;gt;session == session)&lt;br /&gt;
      break;&lt;br /&gt;
    prev = rd;&lt;br /&gt;
  }&lt;br /&gt;
  if (!rd)&lt;br /&gt;
    return FALSE;&lt;br /&gt;
  if (prev)&lt;br /&gt;
    prev-&amp;gt;next = rd-&amp;gt;next;&lt;br /&gt;
  else&lt;br /&gt;
    movers-&amp;gt;riders = rd-&amp;gt;next;&lt;br /&gt;
  free (rd);&lt;br /&gt;
  mv-&amp;gt;rider_count--;&lt;br /&gt;
  aw_whisper (session, RIDER_DELETED_WHISPER);&lt;br /&gt;
  return TRUE;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
BOOL mover_add (unsigned int id, int state, int x, int y, int z,&lt;br /&gt;
                int yaw, int pitch, int roll)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  struct mover*   mv;&lt;br /&gt;
  BOOL            exists;&lt;br /&gt;
&lt;br /&gt;
  if (movers)&lt;br /&gt;
    return FALSE; // this bot controls one mover only!&lt;br /&gt;
&lt;br /&gt;
  for (exists = FALSE, mv = movers; mv; mv = mv-&amp;gt;next)&lt;br /&gt;
    if (mv-&amp;gt;id == id) {&lt;br /&gt;
      exists = TRUE;&lt;br /&gt;
      break;  // exists already&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  if (!mv&lt;br /&gt;
  &amp;amp;&amp;amp; !(mv = (struct mover*)calloc (1, sizeof (struct mover))))&lt;br /&gt;
    return FALSE;&lt;br /&gt;
&lt;br /&gt;
  mv-&amp;gt;id            = id;&lt;br /&gt;
  mv-&amp;gt;init_x        = x;&lt;br /&gt;
  mv-&amp;gt;init_y        = y;&lt;br /&gt;
  mv-&amp;gt;init_z        = z;&lt;br /&gt;
  mv-&amp;gt;init_yaw      = yaw;&lt;br /&gt;
  mv-&amp;gt;init_pitch    = pitch;&lt;br /&gt;
  mv-&amp;gt;init_roll     = roll;&lt;br /&gt;
  mv-&amp;gt;cur_x         = waypoints[0].x;&lt;br /&gt;
  mv-&amp;gt;cur_y         = waypoints[0].y;&lt;br /&gt;
  mv-&amp;gt;cur_z         = waypoints[0].z;&lt;br /&gt;
  mv-&amp;gt;cur_yaw       = waypoints[0].yaw;&lt;br /&gt;
  mv-&amp;gt;cur_pitch     = waypoints[0].pitch;&lt;br /&gt;
  mv-&amp;gt;cur_roll      = waypoints[0].roll;&lt;br /&gt;
  mv-&amp;gt;last_waypoint = 0.0f;&lt;br /&gt;
  mv-&amp;gt;start         = aw_tick ();&lt;br /&gt;
  mv-&amp;gt;state         = state;&lt;br /&gt;
&lt;br /&gt;
  if (!exists) {&lt;br /&gt;
    if (movers)&lt;br /&gt;
      mv-&amp;gt;next = movers;&lt;br /&gt;
    movers = mv;&lt;br /&gt;
  }&lt;br /&gt;
  return TRUE;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
BOOL mover_change (unsigned int id, int state, int x, int y, int z,&lt;br /&gt;
                   int yaw, int pitch, int roll)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  struct mover*   mv;&lt;br /&gt;
&lt;br /&gt;
  for (mv = movers; mv; mv = mv-&amp;gt;next)&lt;br /&gt;
    if (mv-&amp;gt;id == id)&lt;br /&gt;
      break;&lt;br /&gt;
  if (!mv)&lt;br /&gt;
    return FALSE;&lt;br /&gt;
&lt;br /&gt;
  mv-&amp;gt;state       = state;&lt;br /&gt;
&lt;br /&gt;
  if (state == AW_MOVER_STATE_RESET) {&lt;br /&gt;
    mv-&amp;gt;cur_x         = waypoints[0].x;&lt;br /&gt;
    mv-&amp;gt;cur_y         = waypoints[0].y;&lt;br /&gt;
    mv-&amp;gt;cur_z         = waypoints[0].z;&lt;br /&gt;
    mv-&amp;gt;cur_yaw       = waypoints[0].yaw;&lt;br /&gt;
    mv-&amp;gt;cur_pitch     = waypoints[0].pitch;&lt;br /&gt;
    mv-&amp;gt;cur_roll      = waypoints[0].roll;&lt;br /&gt;
    mv-&amp;gt;last_waypoint = 0.0f;&lt;br /&gt;
    mv-&amp;gt;start = aw_tick ();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return TRUE;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
BOOL mover_del (unsigned int id)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  struct mover*   mv;&lt;br /&gt;
  struct mover*   prev;&lt;br /&gt;
  struct rider*   rd;&lt;br /&gt;
  struct rider*   rd_tmp;&lt;br /&gt;
&lt;br /&gt;
  for (prev = NULL, mv = movers; mv; mv = mv-&amp;gt;next) {&lt;br /&gt;
    if (mv-&amp;gt;id == id)&lt;br /&gt;
      break;&lt;br /&gt;
    prev = mv;&lt;br /&gt;
  }&lt;br /&gt;
  if (!mv)&lt;br /&gt;
    return FALSE;&lt;br /&gt;
  for (rd = mv-&amp;gt;riders; rd; ) {&lt;br /&gt;
    rd_tmp  = rd;&lt;br /&gt;
    rd      = rd-&amp;gt;next;&lt;br /&gt;
    free (rd_tmp);&lt;br /&gt;
  }&lt;br /&gt;
  mv-&amp;gt;riders = NULL;&lt;br /&gt;
  if (prev)&lt;br /&gt;
    prev-&amp;gt;next = mv-&amp;gt;next;&lt;br /&gt;
  else&lt;br /&gt;
    movers = mv-&amp;gt;next;&lt;br /&gt;
  free (mv);&lt;br /&gt;
  return TRUE;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void reset ()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  struct mover*   mv;&lt;br /&gt;
  struct mover*   mv_tmp;&lt;br /&gt;
  struct rider*   rd;&lt;br /&gt;
  struct rider*   rd_tmp;&lt;br /&gt;
&lt;br /&gt;
  for (mv = movers; mv; ) {&lt;br /&gt;
    for (rd = mv-&amp;gt;riders; rd; ) {&lt;br /&gt;
      rd_tmp  = rd;&lt;br /&gt;
      rd      = rd-&amp;gt;next;&lt;br /&gt;
      free (rd_tmp);&lt;br /&gt;
    }&lt;br /&gt;
    mv_tmp = mv;&lt;br /&gt;
    mv = mv-&amp;gt;next;&lt;br /&gt;
    free (mv_tmp);&lt;br /&gt;
  }&lt;br /&gt;
  movers = NULL;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handle_entity_add (void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  if (aw_int (AW_ENTITY_TYPE) == AW_ENTITY_MOVER&lt;br /&gt;
  &amp;amp;&amp;amp; aw_int (AW_ENTITY_ID)&lt;br /&gt;
  &amp;amp;&amp;amp; aw_int (AW_ENTITY_OWNER_CITIZEN) == mv_owner&lt;br /&gt;
  &amp;amp;&amp;amp; !stricmp (aw_string (AW_OBJECT_MODEL), mv_model)) {&lt;br /&gt;
    if (mover_add (aw_int (AW_ENTITY_ID), aw_int (AW_ENTITY_STATE),&lt;br /&gt;
      aw_int (AW_OBJECT_X), aw_int (AW_OBJECT_Y), aw_int (AW_OBJECT_Z),&lt;br /&gt;
      aw_int (AW_OBJECT_YAW), aw_int (AW_OBJECT_TILT), aw_int (AW_OBJECT_ROLL))) {&lt;br /&gt;
      // Reset the mover in case it&#039;s used (causes mover to blick 10 seconds)&lt;br /&gt;
      if (aw_int (AW_ENTITY_STATE) != AW_MOVER_STATE_IDLE)&lt;br /&gt;
        aw_mover_set_state (aw_int (AW_ENTITY_ID), AW_MOVER_STATE_RESET, 0);&lt;br /&gt;
&lt;br /&gt;
      log_msg (&amp;quot;Mover ADD: %u %s&amp;quot;, aw_int (AW_ENTITY_ID), aw_string (AW_OBJECT_MODEL));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handle_entity_change (void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  if (mover_change (aw_int (AW_ENTITY_ID), aw_int (AW_ENTITY_STATE),&lt;br /&gt;
    aw_int (AW_ENTITY_X), aw_int (AW_ENTITY_Y), aw_int (AW_ENTITY_Z),&lt;br /&gt;
    aw_int (AW_ENTITY_YAW), aw_int (AW_ENTITY_PITCH), aw_int (AW_ENTITY_ROLL))) {&lt;br /&gt;
    // Reset the mover when bot isn&#039;t owner! (somewhere else is using it)&lt;br /&gt;
    if (aw_int (AW_ENTITY_STATE) != AW_MOVER_STATE_RESET&lt;br /&gt;
    &amp;amp;&amp;amp; aw_int (AW_ENTITY_STATE) != AW_MOVER_STATE_IDLE&lt;br /&gt;
    &amp;amp;&amp;amp; aw_int (AW_ENTITY_OWNER_SESSION) != aw_session ())&lt;br /&gt;
      aw_mover_set_state (aw_int (AW_ENTITY_ID), AW_MOVER_STATE_RESET, 0);&lt;br /&gt;
    log_msg (&amp;quot;Mover CHG: %u state: %d&amp;quot;, aw_int (AW_ENTITY_ID), aw_int (AW_ENTITY_STATE));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handle_entity_delete (void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  if (mover_del (aw_int (AW_ENTITY_ID)))&lt;br /&gt;
    log_msg (&amp;quot;Mover DEL: %u&amp;quot;, aw_int (AW_ENTITY_ID));&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handle_entity_rider_add (void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  if (rider_add (aw_int (AW_ENTITY_ID), aw_int (AW_AVATAR_SESSION)))&lt;br /&gt;
    log_msg (&amp;quot;Rider ADD: %u session# %d&amp;quot;, aw_int (AW_ENTITY_ID), aw_int (AW_AVATAR_SESSION));&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handle_entity_rider_change (void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  if (rider_add (aw_int (AW_ENTITY_ID), aw_int (AW_AVATAR_SESSION)))&lt;br /&gt;
    log_msg (&amp;quot;Rider CHG: %u session# %d&amp;quot;, aw_int (AW_ENTITY_ID), aw_int (AW_AVATAR_SESSION));&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handle_entity_rider_delete (void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  if (rider_del (aw_int (AW_ENTITY_ID), aw_int (AW_AVATAR_SESSION)))&lt;br /&gt;
    log_msg (&amp;quot;Rider DEL: %u session# %d&amp;quot;, aw_int (AW_ENTITY_ID), aw_int (AW_AVATAR_SESSION));&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handle_enter (int rc)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  reset ();&lt;br /&gt;
  if (rc) {&lt;br /&gt;
    log_msg (&amp;quot;world enter failed [%d]&amp;quot;, rc);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // announce our position in the world&lt;br /&gt;
  aw_int_set (AW_MY_X, 0);        // 0W&lt;br /&gt;
  aw_int_set (AW_MY_Y, 0);        // 0a&lt;br /&gt;
  aw_int_set (AW_MY_Z, 0);        // 0N&lt;br /&gt;
  aw_int_set (AW_MY_YAW, 0);      // facing south&lt;br /&gt;
  aw_int_set (AW_MY_PITCH, 0);&lt;br /&gt;
  if (rc = aw_state_change ()) {&lt;br /&gt;
    log_msg (&amp;quot;Unable to change state (reason %d)&amp;quot;, rc);&lt;br /&gt;
    exit (1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  log_msg (&amp;quot;%s entered world %s&amp;quot;,&lt;br /&gt;
    aw_string (AW_LOGIN_NAME), aw_string (AW_WORLD_NAME));&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void handle_world_disconnect (void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  reset ();&lt;br /&gt;
  log_msg (&amp;quot;world disconnected [%d]&amp;quot;, aw_int (AW_DISCONNECT_REASON));&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void pause (int id)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  aw_mover_set_state (id, AW_MOVER_STATE_PAUSE, 0);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void start (int id)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  struct mover*   mv;&lt;br /&gt;
  struct rider*   rd;&lt;br /&gt;
  int             num_riders;&lt;br /&gt;
  int             angle;&lt;br /&gt;
&lt;br /&gt;
  aw_mover_set_state (id, AW_MOVER_STATE_CONTINUE, 0);&lt;br /&gt;
&lt;br /&gt;
// optionally position all riders to their seats,&lt;br /&gt;
// starting with world build 86 and browser build 969&lt;br /&gt;
  for (mv = movers; mv; mv = mv-&amp;gt;next)&lt;br /&gt;
    if (mv-&amp;gt;id == (unsigned int)id)&lt;br /&gt;
      break;&lt;br /&gt;
  if (!mv)&lt;br /&gt;
    return;&lt;br /&gt;
  for (num_riders = 0, rd = mv-&amp;gt;riders; rd; rd = rd-&amp;gt;next)&lt;br /&gt;
    num_riders++;&lt;br /&gt;
  for (angle = 0, rd = mv-&amp;gt;riders; rd; rd = rd-&amp;gt;next) {&lt;br /&gt;
    aw_mover_rider_change (aw_int (AW_ENTITY_ID), rd-&amp;gt;session, 100, angle, -35, 1800, 0);&lt;br /&gt;
    angle += 3600 / num_riders;&lt;br /&gt;
    log_msg (&amp;quot;Rider %d changed to riding position&amp;quot;, rd-&amp;gt;session);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void move_to (struct mover* mv)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  int interval;&lt;br /&gt;
  int wp;&lt;br /&gt;
  int dx;&lt;br /&gt;
  int dy;&lt;br /&gt;
  int dz;&lt;br /&gt;
  int dyaw;&lt;br /&gt;
  int dpitch;&lt;br /&gt;
  int droll;&lt;br /&gt;
&lt;br /&gt;
  interval  = aw_int (AW_WORLD_AVATAR_REFRESH_RATE) * WAYPOINT_RESOLUTION;&lt;br /&gt;
  wp        = (int)mv-&amp;gt;last_waypoint;&lt;br /&gt;
  if (wp &amp;lt; 0 || wp &amp;gt;= MAX_WAYPOINTS)&lt;br /&gt;
    wp = 0;&lt;br /&gt;
&lt;br /&gt;
  if (wp) {&lt;br /&gt;
    dx      = mv-&amp;gt;cur_x + ((waypoints[wp].x - waypoints[wp - 1].x) / interval);&lt;br /&gt;
    dy      = mv-&amp;gt;cur_y + ((waypoints[wp].y - waypoints[wp - 1].y) / interval);&lt;br /&gt;
    dz      = mv-&amp;gt;cur_z + ((waypoints[wp].z - waypoints[wp - 1].z) / interval);&lt;br /&gt;
    dyaw    = mv-&amp;gt;cur_yaw + ((waypoints[wp].yaw - waypoints[wp - 1].yaw) / interval);&lt;br /&gt;
    dpitch  = mv-&amp;gt;cur_pitch + ((waypoints[wp].pitch - waypoints[wp - 1].pitch) / interval);&lt;br /&gt;
    droll   = mv-&amp;gt;cur_roll + ((waypoints[wp].roll - waypoints[wp - 1].roll) / interval);&lt;br /&gt;
  } else {&lt;br /&gt;
    dx      = waypoints[wp].x;&lt;br /&gt;
    dy      = waypoints[wp].y;&lt;br /&gt;
    dz      = waypoints[wp].z;&lt;br /&gt;
    dyaw    = waypoints[wp].yaw;&lt;br /&gt;
    dpitch  = waypoints[wp].pitch;&lt;br /&gt;
    droll   = waypoints[wp].roll;&lt;br /&gt;
  }&lt;br /&gt;
  mv-&amp;gt;cur_x       = dx;&lt;br /&gt;
  mv-&amp;gt;cur_y       = dy;&lt;br /&gt;
  mv-&amp;gt;cur_z       = dz;&lt;br /&gt;
  mv-&amp;gt;cur_yaw     = dyaw;&lt;br /&gt;
  mv-&amp;gt;cur_pitch   = dpitch;&lt;br /&gt;
  mv-&amp;gt;cur_roll    = droll;&lt;br /&gt;
&lt;br /&gt;
  aw_mover_set_position (mv-&amp;gt;id,&lt;br /&gt;
    mv-&amp;gt;init_x + dx, mv-&amp;gt;init_y + dy, mv-&amp;gt;init_z + dz,&lt;br /&gt;
    mv-&amp;gt;init_yaw + dyaw, mv-&amp;gt;init_pitch + dpitch, mv-&amp;gt;init_roll + droll);&lt;br /&gt;
&lt;br /&gt;
  mv-&amp;gt;last_move = aw_tick ();&lt;br /&gt;
&lt;br /&gt;
  log_msg (&amp;quot;Mover MOV: %u delta: %d %d %d %d %d %d&amp;quot;, mv-&amp;gt;id,&lt;br /&gt;
    dx, dy, dz, dyaw, dpitch, droll);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void idle (struct mover* mv)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  if (mv-&amp;gt;last_move + IDLE_INTERVAL &amp;lt; aw_tick ())&lt;br /&gt;
    move_to (mv);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int update ()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  struct mover*   mv;&lt;br /&gt;
  struct rider*   rd;&lt;br /&gt;
  int             count;&lt;br /&gt;
  unsigned int    frame_time;&lt;br /&gt;
&lt;br /&gt;
  for (count = 0, mv = movers; mv; mv = mv-&amp;gt;next) {&lt;br /&gt;
              &lt;br /&gt;
    if (!mv-&amp;gt;start&lt;br /&gt;
    || mv-&amp;gt;last_update + UPDATE_INTERVAL &amp;gt; aw_tick ())&lt;br /&gt;
      continue;&lt;br /&gt;
&lt;br /&gt;
    frame_time = aw_tick () - mv-&amp;gt;start;&lt;br /&gt;
//    log_msg (&amp;quot;UPDATE   : %u state %d dt %d&amp;quot;, mv-&amp;gt;id, mv-&amp;gt;state, frame_time);&lt;br /&gt;
&lt;br /&gt;
    if (mv-&amp;gt;state != AW_MOVER_STATE_PAUSE&lt;br /&gt;
    &amp;amp;&amp;amp; mv-&amp;gt;state != AW_MOVER_STATE_MOVE) {&lt;br /&gt;
      if (mv-&amp;gt;state != AW_MOVER_STATE_IDLE)&lt;br /&gt;
        continue;&lt;br /&gt;
      // Set state to Pause, so other users can join in&lt;br /&gt;
      pause (mv-&amp;gt;id);&lt;br /&gt;
      mv-&amp;gt;state = STATE_INVALIDATE; // invalidate state&lt;br /&gt;
      // Move to first waypoint&lt;br /&gt;
      mv-&amp;gt;last_waypoint = 0.0f;&lt;br /&gt;
      move_to (mv);&lt;br /&gt;
      // Add bot as driver to first mover&lt;br /&gt;
      if (mv == movers)&lt;br /&gt;
        aw_mover_rider_add (mv-&amp;gt;id, aw_session (), 450, 1800, -30, 1800, 0);&lt;br /&gt;
      mv-&amp;gt;start = aw_tick ();&lt;br /&gt;
      announce (READY_MSG);&lt;br /&gt;
      continue;&lt;br /&gt;
    }&lt;br /&gt;
    idle (mv); // see if we have to send pos to prevent timeout&lt;br /&gt;
    if (frame_time &amp;lt; 15000) {&lt;br /&gt;
      // wait to get ready or something else?&lt;br /&gt;
      continue;&lt;br /&gt;
    } else if (mv-&amp;gt;last_waypoint &amp;gt;= 0.0f) {&lt;br /&gt;
      if (mv-&amp;gt;state != AW_MOVER_STATE_MOVE&lt;br /&gt;
      &amp;amp;&amp;amp; mv-&amp;gt;state != STATE_INVALIDATE) {&lt;br /&gt;
        if (mv-&amp;gt;rider_count &amp;lt;= 0) {&lt;br /&gt;
          mv-&amp;gt;start = aw_tick ();&lt;br /&gt;
          announce (POSTPONE_MSG);&lt;br /&gt;
          continue;&lt;br /&gt;
        }&lt;br /&gt;
        start (mv-&amp;gt;id);&lt;br /&gt;
        mv-&amp;gt;state = STATE_INVALIDATE; // invalidate state&lt;br /&gt;
        announce (START_MSG);&lt;br /&gt;
      } else if (mv-&amp;gt;state == AW_MOVER_STATE_MOVE) {&lt;br /&gt;
        mv-&amp;gt;last_waypoint += 1.0f / (float)(aw_int (AW_WORLD_AVATAR_REFRESH_RATE) * WAYPOINT_RESOLUTION);&lt;br /&gt;
        if (mv-&amp;gt;last_waypoint &amp;gt;= MAX_WAYPOINTS)&lt;br /&gt;
          mv-&amp;gt;last_waypoint = 0.0f;&lt;br /&gt;
        move_to (mv);&lt;br /&gt;
        count++;&lt;br /&gt;
        if (mv-&amp;gt;last_waypoint == 0.0f)&lt;br /&gt;
          mv-&amp;gt;last_waypoint = -1.0f;&lt;br /&gt;
      }&lt;br /&gt;
    } else if (mv-&amp;gt;last_waypoint &amp;lt; 0.0f &amp;amp;&amp;amp; mv-&amp;gt;state == AW_MOVER_STATE_MOVE) {&lt;br /&gt;
      // Don&#039;t pause before mover has reached the last waypoint,&lt;br /&gt;
      if (mv-&amp;gt;last_update + (2000 / aw_int (AW_WORLD_AVATAR_REFRESH_RATE)) &amp;lt; aw_tick ()) {&lt;br /&gt;
        pause (mv-&amp;gt;id);&lt;br /&gt;
        mv-&amp;gt;state = STATE_INVALIDATE; // invalidate state&lt;br /&gt;
        announce (STOP_MSG);&lt;br /&gt;
      } else&lt;br /&gt;
        continue;&lt;br /&gt;
    } else if (mv-&amp;gt;last_waypoint &amp;lt; 0.0f &amp;amp;&amp;amp; mv-&amp;gt;state == AW_MOVER_STATE_PAUSE) {&lt;br /&gt;
      for (rd = mv-&amp;gt;riders; rd; rd = rd-&amp;gt;next)&lt;br /&gt;
        if (rd-&amp;gt;session != aw_session ())&lt;br /&gt;
          aw_mover_rider_delete (mv-&amp;gt;id, rd-&amp;gt;session);&lt;br /&gt;
      mv-&amp;gt;start = aw_tick ();&lt;br /&gt;
      mv-&amp;gt;last_waypoint = 0.0f;&lt;br /&gt;
      announce (READY_MSG);&lt;br /&gt;
      count++;&lt;br /&gt;
    }&lt;br /&gt;
    mv-&amp;gt;last_update = aw_tick ();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return count;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
main (int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  int   rc;&lt;br /&gt;
  int   owner;&lt;br /&gt;
	char* pw;&lt;br /&gt;
  char* world;&lt;br /&gt;
&lt;br /&gt;
  // check command line&lt;br /&gt;
  if (argc &amp;lt; 4) {&lt;br /&gt;
    log_msg (&amp;quot;Usage: %s citnumber password world&amp;quot;, argv[0]);&lt;br /&gt;
    exit (1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // initialize Active Worlds API&lt;br /&gt;
  if (rc = aw_init (AW_BUILD)) {&lt;br /&gt;
    log_msg (&amp;quot;Unable to initialize API (reason %d)&amp;quot;, rc);&lt;br /&gt;
    exit (1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // install handler for callbacks and events&lt;br /&gt;
  aw_callback_set (AW_CALLBACK_ENTER, handle_enter);&lt;br /&gt;
  aw_event_set (AW_EVENT_WORLD_DISCONNECT, handle_world_disconnect);&lt;br /&gt;
&lt;br /&gt;
  aw_event_set (AW_EVENT_ENTITY_ADD, handle_entity_add);&lt;br /&gt;
  aw_event_set (AW_EVENT_ENTITY_CHANGE, handle_entity_change);&lt;br /&gt;
  aw_event_set (AW_EVENT_ENTITY_DELETE, handle_entity_delete);&lt;br /&gt;
  aw_event_set (AW_EVENT_ENTITY_RIDER_ADD, handle_entity_rider_add);&lt;br /&gt;
  aw_event_set (AW_EVENT_ENTITY_RIDER_DELETE, handle_entity_rider_delete);&lt;br /&gt;
  aw_event_set (AW_EVENT_ENTITY_RIDER_CHANGE, handle_entity_rider_change);&lt;br /&gt;
&lt;br /&gt;
  // create bot instance&lt;br /&gt;
  if (rc = aw_create (&amp;quot;&amp;quot;, 0, 0)) {&lt;br /&gt;
    log_msg (&amp;quot;Unable to create bot instance (reason %d)&amp;quot;, rc);&lt;br /&gt;
    exit (1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  owner = atoi (argv[1]);&lt;br /&gt;
  pw    = argv[2];&lt;br /&gt;
  world = argv[3];&lt;br /&gt;
&lt;br /&gt;
  // log bot into the universe&lt;br /&gt;
  aw_int_set (AW_LOGIN_OWNER, owner);&lt;br /&gt;
  aw_string_set (AW_LOGIN_PRIVILEGE_PASSWORD, pw);&lt;br /&gt;
  aw_string_set (AW_LOGIN_APPLICATION, &amp;quot;MoverControlSample&amp;quot;);&lt;br /&gt;
  aw_string_set (AW_LOGIN_NAME, &amp;quot;MoverControl&amp;quot;);&lt;br /&gt;
  if (rc = aw_login ()) {&lt;br /&gt;
    log_msg (&amp;quot;Unable to login (reason %d)&amp;quot;, rc);&lt;br /&gt;
    exit (1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  log_msg (&amp;quot;Successfully logged into Universe&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  strcpy (mv_model, &amp;quot;trolly.rwx&amp;quot;);&lt;br /&gt;
  mv_owner = 101;&lt;br /&gt;
&lt;br /&gt;
  // log bot into the world&lt;br /&gt;
  if (rc = aw_enter (world)) {&lt;br /&gt;
    log_msg (&amp;quot;Unable to enter world (reason %d)&amp;quot;, rc);&lt;br /&gt;
    exit (1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  log_msg (&amp;quot;Successfully entered World %s&amp;quot;, world);&lt;br /&gt;
&lt;br /&gt;
  // main event loop&lt;br /&gt;
  while (!aw_wait (WAIT_TIME))&lt;br /&gt;
    update ();&lt;br /&gt;
&lt;br /&gt;
  // close everything&lt;br /&gt;
  aw_destroy ();&lt;br /&gt;
  aw_term ();&lt;br /&gt;
  return 0;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*-----------------------------------------------------------------------------&lt;br /&gt;
                                  E O F&lt;br /&gt;
-----------------------------------------------------------------------------*/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Aw_tick&amp;diff=199</id>
		<title>Aw tick</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Aw_tick&amp;diff=199"/>
		<updated>2025-04-07T19:26:19Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{SDK added in|version=4.1|sdk=53|world=|universe=|browser=}}  __NOTOC__   unsigned int aw_tick (void)  ==Description== Returns the number of milliseconds that have elapsed since the SDK was initialized.  ==Callback== None (returns immediately)  ==Notes== This method provides a high precision reference time for time critical operations or application timers. The degree of precision depends largely on the operating system being used.  :{| border cellpadding=4 cellspacing=...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SDK added in|version=4.1|sdk=53|world=|universe=|browser=}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 unsigned int aw_tick (void)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Returns the number of milliseconds that have elapsed since the SDK was initialized.&lt;br /&gt;
&lt;br /&gt;
==Callback==&lt;br /&gt;
None (returns immediately)&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
This method provides a high precision reference time for time critical operations or application timers. The degree of precision depends largely on the operating system being used.&lt;br /&gt;
&lt;br /&gt;
:{| border cellpadding=4 cellspacing=0&lt;br /&gt;
|- valign=bottom align=left&lt;br /&gt;
!Precision (1) !!Operating system&lt;br /&gt;
|-&lt;br /&gt;
| 1 ms || Linux variants&lt;br /&gt;
|-&lt;br /&gt;
| 1 ms || Windows Vista&lt;br /&gt;
|-&lt;br /&gt;
| ~10 ms || Windows 2000, Windows XP and Windows 2003&lt;br /&gt;
|-&lt;br /&gt;
| ~15 ms || Windows NT 3.1&lt;br /&gt;
|-&lt;br /&gt;
| ~50 ms || Windows 95, Windows 98 and Windows ME&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(1)&#039;&#039;&#039; Precision is defined as the smallest difference between tick counts from successive calls to this method.&lt;br /&gt;
&lt;br /&gt;
The return value is always equal to or larger than one from a previous call, with one exception. As it is only a 32-bit number it will wrap around to zero after 49.7 days (or 0xFFFFFFFF milliseconds). This has the potential to cause problems in bots that run for extended periods.&lt;br /&gt;
&lt;br /&gt;
==Arguments==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Argument attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Return values==&lt;br /&gt;
Number of milliseconds that have elapsed since [[aw_init]] or [[aw_init_bind]] was called.&lt;br /&gt;
&lt;br /&gt;
==Returned attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
 while (1)&lt;br /&gt;
 {&lt;br /&gt;
   [[aw_wait]] (1);&lt;br /&gt;
   /*&lt;br /&gt;
     The tick count is likely to go past 1000000 without assuming that exact value.&lt;br /&gt;
     It is not possible to use the == operator to test for a particular tick count.&lt;br /&gt;
   */&lt;br /&gt;
   if ([[aw_tick]] () &amp;gt;= 1000000) &lt;br /&gt;
   {&lt;br /&gt;
     puts (&amp;quot;One million milliseconds have elapsed since the SDK was initialized!&amp;quot;);&lt;br /&gt;
     break;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Mover Control example code]]&lt;br /&gt;
*[[aw_init]]&lt;br /&gt;
*[[aw_init_bind]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK Methods|T]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Aw_random&amp;diff=198</id>
		<title>Aw random</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Aw_random&amp;diff=198"/>
		<updated>2025-04-07T19:26:01Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{SDK added in|version=2.1|sdk=13|world=|universe=|browser=}}  __NOTOC__   int aw_random (void)  ==Description== Returns a random number.  ==Notes== The psuedo-random number generator (PRNG) employed by this method is [http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html Mersenne Twister] (MT) by Matsumoto and Nishimura. It sets new standards for the period, quality and speed of random number generators. The incredible period is 219937 - 1, a number with about 6000 d...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SDK added in|version=2.1|sdk=13|world=|universe=|browser=}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 int aw_random (void)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Returns a random number.&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
The psuedo-random number generator (PRNG) employed by this method is [http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html Mersenne Twister] (MT) by Matsumoto and Nishimura. It sets new standards for the period, quality and speed of random number generators. The incredible period is 219937 - 1, a number with about 6000 digits. The 32-bit random numbers exhibit best possible equidistribution properties in dimensions up to 623 and it&#039;s very fast.&lt;br /&gt;
&lt;br /&gt;
===Predictability===&lt;br /&gt;
This PRNG is should &#039;&#039;&#039;not&#039;&#039;&#039; be used in cryptography as it has major vulnerabilities:&lt;br /&gt;
&lt;br /&gt;
*Observing a sufficiently long sequence of outputs from MT is enough to predict all future outputs.&lt;br /&gt;
*It takes many iterations before the initial non-random state produces output that will pass a randomness test.&lt;br /&gt;
&lt;br /&gt;
Two steps can be taken to mitigate the problems:&lt;br /&gt;
&lt;br /&gt;
*Generate multiple 32-bit outputs (e.g. 8 would be sufficient) and digest them using a [http://en.wikipedia.org/wiki/Cryptographic_hash_function cryptographic hash function] such as RIPEMD or SHA-1.&lt;br /&gt;
*Throw away the first x number of outputs from MT (e.g. call aw_random a million times when the SDK application is initialized).&lt;br /&gt;
&lt;br /&gt;
===Seed search attack===&lt;br /&gt;
The implementation used in the SDK is also vulnurable to a &amp;quot;seed search attack&amp;quot; due to only using a 32-bit number for the seed (i.e. it can only produce 2^32 different sequences of psedo-random numbers). This means that attackers would need to try at most 2^32 different seeds before finding the one being used.&lt;br /&gt;
&lt;br /&gt;
If a large number of initial outputs of MT have been thrown away then attackers would need to generate a longer sequence of numbers to test each seed. If 1,000,000 numbers were thrown away and 1000 have been passed to users then an attacker would need to generate roughly 1001000 * 2^32 numbers to be sure of finding the correct seed (in addition to seeding 2^32 times).&lt;br /&gt;
&lt;br /&gt;
==Arguments==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Argument attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Return values==&lt;br /&gt;
Signed 32-bit number (i.e. a range of -2147483648 to +2147483647).&lt;br /&gt;
&lt;br /&gt;
==Returned attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Naive&lt;br /&gt;
&lt;br /&gt;
 if ([[aw_random]] () == 547891)&lt;br /&gt;
   puts (&amp;quot;You sure are lucky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Better&lt;br /&gt;
&lt;br /&gt;
 void random_init (void)&lt;br /&gt;
 {&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   for (i = 0; i &amp;lt; 1000000; i++)&lt;br /&gt;
     [[aw_random]] ();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int random_secure (void)&lt;br /&gt;
 {&lt;br /&gt;
   int n;&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   n = 0;&lt;br /&gt;
   &lt;br /&gt;
   /*&lt;br /&gt;
     combine multiple outputs into a single number using xor&lt;br /&gt;
   */&lt;br /&gt;
   for (i = 0; i &amp;lt; 8; i++) &lt;br /&gt;
     n ^= [[aw_random]] ();&lt;br /&gt;
   &lt;br /&gt;
   return n;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 random_init (); &lt;br /&gt;
 &lt;br /&gt;
 if (random_secure () == 547891)&lt;br /&gt;
   puts (&amp;quot;You sure are lucky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Secure&lt;br /&gt;
&lt;br /&gt;
 void random_init (void)&lt;br /&gt;
 {&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   for (i = 0; i &amp;lt; 1000000; i++)&lt;br /&gt;
     [[aw_random]] ();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int random_secure (void)&lt;br /&gt;
 {&lt;br /&gt;
   int buf[8];&lt;br /&gt;
   int i;&lt;br /&gt;
   &lt;br /&gt;
   for (i = 0; i &amp;lt; 8; i++) &lt;br /&gt;
     buf[i] = [[aw_random]] ();&lt;br /&gt;
   &lt;br /&gt;
   /*&lt;br /&gt;
     function that takes a buffer as input, digests it using RIPEMD-128&lt;br /&gt;
     and returns a 32-bit hash value from the output&lt;br /&gt;
   */&lt;br /&gt;
   &lt;br /&gt;
   return ripemd128_32 ((char*)&amp;amp;buf, sizeof (buf));&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 random_init (); &lt;br /&gt;
 &lt;br /&gt;
 if (random_secure () == 547891)&lt;br /&gt;
   puts (&amp;quot;You sure are lucky&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[aw_init]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK Methods|R]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Aw_init_bind&amp;diff=197</id>
		<title>Aw init bind</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Aw_init_bind&amp;diff=197"/>
		<updated>2025-04-07T19:25:42Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{SDK added in|version=4.1|sdk=61|world=|universe=|browser=}}  __NOTOC__   int aw_init_bind (int &amp;lt;var&amp;gt;build&amp;lt;/var&amp;gt;, unsigned long &amp;lt;var&amp;gt;addr&amp;lt;/var&amp;gt;)  ==Description== Initializes the SDK and specifies the source IP address for outbound connections.  ==Callback== None (returns immediately)  ==Notes== Specifying the source IP address is useful when you have multiple network interface cards (NIC) or a single NIC with multiple IP addresses. The source IP address must either matc...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SDK added in|version=4.1|sdk=61|world=|universe=|browser=}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 int aw_init_bind (int &amp;lt;var&amp;gt;build&amp;lt;/var&amp;gt;, unsigned long &amp;lt;var&amp;gt;addr&amp;lt;/var&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Initializes the SDK and specifies the source IP address for outbound connections.&lt;br /&gt;
&lt;br /&gt;
==Callback==&lt;br /&gt;
None (returns immediately)&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
Specifying the source IP address is useful when you have multiple network interface cards (NIC) or a single NIC with multiple IP addresses. The source IP address must either match or be within range of the IP address(es) used by a network interface on the system.&lt;br /&gt;
&lt;br /&gt;
This method or [[aw_init]] must be called once before any other methods in the API. It will do an implicit [[aw_term]] if the SDK has already been successfully initialized. Thus, there is no need to call [[aw_term]] for each additional call to this method, as there is no reference count.&lt;br /&gt;
&lt;br /&gt;
If successful then the tick count returned by [[aw_tick]] is reset to 0 and the pseudo-random number generator used by [[aw_random]] is seeded.&lt;br /&gt;
&lt;br /&gt;
==Arguments==&lt;br /&gt;
;build:AW_BUILD in Aw.h defines the build of Aw.dll (or libaw_sdk.so for Linux) it was distributed with and should be passed as the value of this argument. &lt;br /&gt;
;addr:Source IP address for outbound connections (in network byte order.) If set to 0 (0.0.0.0) then it will be the same as calling [[aw_wait]].&lt;br /&gt;
&lt;br /&gt;
==Argument attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Return values==&lt;br /&gt;
;[[SDK Reason Codes#RC_SUCCESS|RC_SUCCESS]]:&lt;br /&gt;
;[[SDK Reason Codes#RC_VERSION_MISMATCH|RC_VERSION_MISMATCH]]:Aw.h and Aw.dll (or libaw_sdk.so for Linux) are from different builds of the SDK.&lt;br /&gt;
&lt;br /&gt;
==Returned attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
 #include &amp;quot;Aw.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;[[Reason.h]]&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int main (int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
   /* use 192.168.0.1 as the source for outbound connections */&lt;br /&gt;
   if ([[aw_init_bind]] (AW_BUILD, inet_addr (&amp;quot;192.168.0.1&amp;quot;)) != [[SDK Reason Codes#RC_SUCCESS|RC_SUCCESS]])&lt;br /&gt;
   {&lt;br /&gt;
     printf (&amp;quot;Build #%d of Aw.dll is required to run this bot.\n&amp;quot;, AW_BUILD);&lt;br /&gt;
     return 1;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   /* ... */&lt;br /&gt;
   &lt;br /&gt;
   [[aw_term]] ();&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[SDK_Application_Structure|Application structure]]&lt;br /&gt;
*[[aw_init]]&lt;br /&gt;
*[[aw_random]]&lt;br /&gt;
*[[aw_term]]&lt;br /&gt;
*[[aw_tick]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK Methods|I]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Aw_term&amp;diff=196</id>
		<title>Aw term</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Aw_term&amp;diff=196"/>
		<updated>2025-04-07T19:25:14Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{SDK added in|version=2.1|sdk=13|world=|universe=|browser=}}  __NOTOC__   void aw_term (void)  ==Description== Terminates use of the SDK.  ==Callback== None (returns immediately)  ==Notes== This method deallocates any resources used by instances that have been created. Instances are created using aw_create, aw_create_resolved and aw_server_admin. If a call is placed to this method from within a callback or event handler then it cou...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SDK added in|version=2.1|sdk=13|world=|universe=|browser=}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 void aw_term (void)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Terminates use of the SDK.&lt;br /&gt;
&lt;br /&gt;
==Callback==&lt;br /&gt;
None (returns immediately)&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
This method deallocates any resources used by [[SDK_Multiple_Instances|instances]] that have been created. Instances are created using [[aw_create]], [[aw_create_resolved]] and [[aw_server_admin]]. If a call is placed to this method from within a callback or event handler then it could leave dangling pointers in the SDK. Possibly causing a general protection fault (GPF) when it tries to access memory that has been freed.&lt;br /&gt;
&lt;br /&gt;
Any installed callback or event handlers will remain and be used again if the SDK is initialized.&lt;br /&gt;
&lt;br /&gt;
The [[aw_destroy]] method should be used to safely destroy [[SDK_Multiple_Instances|instances]] from within callback or event handlers. This is because [[aw_destroy]] does not deallocate them at once. They merely get flagged as &amp;quot;destroyed&amp;quot; which stops the SDK from processing packets for them.&lt;br /&gt;
&lt;br /&gt;
Calling [[aw_destroy]] for all instances followed by [[aw_wait]] (0) is almost the same as calling aw_term. This is because [[aw_wait]] will deallocate instances marked as &amp;quot;destroyed&amp;quot;. Only difference is that it would not be necessary to call [[aw_init]] again before creating instances.&lt;br /&gt;
&lt;br /&gt;
Note that [[aw_destroy]] followed by [[aw_wait]] (0) within a callback or event handler is as bad as aw_term because both would deallocate the instance.&lt;br /&gt;
&lt;br /&gt;
==Arguments==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Argument attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Return values==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Returned attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
 #include &amp;quot;Aw.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;[[Reason.h]]&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int main (int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
   if ([[aw_init]] (AW_BUILD) != [[SDK Reason Codes#RC_SUCCESS|RC_SUCCESS]])&lt;br /&gt;
   {&lt;br /&gt;
     printf (&amp;quot;Build #%d of Aw.dll is required to run this bot.\n&amp;quot;, AW_BUILD);&lt;br /&gt;
     return 1;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   /* ... */&lt;br /&gt;
   &lt;br /&gt;
   [[aw_term]] ();&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[SDK_Application_Structure|Application structure]]&lt;br /&gt;
*[[aw_init]]&lt;br /&gt;
*[[aw_init_bind]]&lt;br /&gt;
*[[aw_create]]&lt;br /&gt;
*[[aw_create_resolved]]&lt;br /&gt;
*[[aw_server_admin]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK Methods|T]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Reason.h&amp;diff=195</id>
		<title>Reason.h</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Reason.h&amp;diff=195"/>
		<updated>2025-04-07T19:24:46Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot; #define RC_SUCCESS 0  #define RC_CITIZENSHIP_EXPIRED 1  #define RC_LAND_LIMIT_EXCEEDED 2  #define RC_NO_SUCH_CITIZEN 3  #define RC_MESSAGE_LENGTH_BAD 4  #define RC_LICENSE_PASSWORD_CONTAINS_SPACE 5  #define RC_LICENSE_PASSWORD_TOO_LONG 6  #define RC_LICENSE_PASSWORD_TOO_SHORT 7  #define RC_LICENSE_RANGE_TOO_LARGE 8  #define RC_LICENSE_RANGE_TOO_SMALL 9  #define RC_LICENSE_USERS_TOO_LARGE 10  #define RC_LICENSE_USERS_TOO_SMALL 11  #define RC_LICENSE_CONTAINS_INVALID_CHAR...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; #define RC_SUCCESS 0&lt;br /&gt;
 #define RC_CITIZENSHIP_EXPIRED 1&lt;br /&gt;
 #define RC_LAND_LIMIT_EXCEEDED 2&lt;br /&gt;
 #define RC_NO_SUCH_CITIZEN 3&lt;br /&gt;
 #define RC_MESSAGE_LENGTH_BAD 4&lt;br /&gt;
 #define RC_LICENSE_PASSWORD_CONTAINS_SPACE 5&lt;br /&gt;
 #define RC_LICENSE_PASSWORD_TOO_LONG 6&lt;br /&gt;
 #define RC_LICENSE_PASSWORD_TOO_SHORT 7&lt;br /&gt;
 #define RC_LICENSE_RANGE_TOO_LARGE 8&lt;br /&gt;
 #define RC_LICENSE_RANGE_TOO_SMALL 9&lt;br /&gt;
 #define RC_LICENSE_USERS_TOO_LARGE 10&lt;br /&gt;
 #define RC_LICENSE_USERS_TOO_SMALL 11&lt;br /&gt;
 #define RC_LICENSE_CONTAINS_INVALID_CHAR 12&lt;br /&gt;
 #define RC_INVALID_PASSWORD 13&lt;br /&gt;
 #define RC_UNABLE_TO_MAIL_BACK_NUMBER 14&lt;br /&gt;
 #define RC_LICENSE_WORLD_TOO_SHORT 15&lt;br /&gt;
 #define RC_LICENSE_WORLD_TOO_LONG 16&lt;br /&gt;
 #define RC_SERVER_OUT_OF_MEMORY 17&lt;br /&gt;
 #define RC_INVALID_WORLD 20&lt;br /&gt;
 #define RC_SERVER_OUTDATED 21&lt;br /&gt;
 #define RC_WORLD_ALREADY_STARTED 22&lt;br /&gt;
 #define RC_NO_SUCH_WORLD 27&lt;br /&gt;
 #define RC_NOT_LOGGED_IN 31&lt;br /&gt;
 #define RC_UNAUTHORIZED 32&lt;br /&gt;
 #define RC_WORLD_ALREADY_EXISTS 33&lt;br /&gt;
 #define RC_NO_SUCH_LICENSE 34&lt;br /&gt;
 #define RC_IDENTITY_ALREADY_IN_USE 39&lt;br /&gt;
 #define RC_UNABLE_TO_REPORT_LOCATION 40&lt;br /&gt;
 #define RC_INVALID_EMAIL 41&lt;br /&gt;
 #define RC_NO_SUCH_ACTING_CITIZEN 42&lt;br /&gt;
 #define RC_ACTING_PASSWORD_INVALID 43&lt;br /&gt;
 #define RC_UNIVERSE_FULL 45&lt;br /&gt;
 #define RC_BILLING_TIMEOUT 46&lt;br /&gt;
 #define RC_BILLING_RECV_FAILED 47&lt;br /&gt;
 #define RC_BILLING_RESPONSE_INVALID 48&lt;br /&gt;
 #define RC_BILLING_REJECTED 55&lt;br /&gt;
 #define RC_BILLING_BLOCKED 56&lt;br /&gt;
 #define RC_TOO_MANY_WORLDS 57&lt;br /&gt;
 #define RC_MUST_UPGRADE 58&lt;br /&gt;
 #define RC_BOT_LIMIT_EXCEEDED 59&lt;br /&gt;
 #define RC_WORLD_EXPIRED 61&lt;br /&gt;
 #define RC_CITIZEN_DOES_NOT_EXPIRE 62&lt;br /&gt;
 #define RC_LICENSE_STARTS_WITH_NUMBER 64&lt;br /&gt;
 #define RC_NO_SUCH_EJECTION 66&lt;br /&gt;
 #define RC_NO_SUCH_SESSION 67&lt;br /&gt;
 #define RC_EJECTION_EXPIRED 69&lt;br /&gt;
 #define RC_ACTING_CITIZEN_EXPIRED 70&lt;br /&gt;
 #define RC_ALREADY_STARTED 71&lt;br /&gt;
 #define RC_WORLD_RUNNING 72&lt;br /&gt;
 #define RC_WORLD_NOT_SET 73&lt;br /&gt;
 #define RC_NO_SUCH_CELL 74&lt;br /&gt;
 #define RC_NO_REGISTRY 75&lt;br /&gt;
 #define RC_CANT_OPEN_REGISTRY 76&lt;br /&gt;
 #define RC_CITIZEN_DISABLED 77&lt;br /&gt;
 #define RC_WORLD_DISABLED 78&lt;br /&gt;
 #define RC_BETA_REQUIRED 79&lt;br /&gt;
 #define RC_ACTING_CITIZEN_DISABLED 80&lt;br /&gt;
 #define RC_INVALID_USER_COUNT 81&lt;br /&gt;
 #define RC_PRIVATE_WORLD 91&lt;br /&gt;
 #define RC_NO_TOURISTS 92&lt;br /&gt;
 #define RC_EMAIL_CONTAINS_INVALID_CHAR 100&lt;br /&gt;
 #define RC_EMAIL_ENDS_WITH_BLANK 101&lt;br /&gt;
 #define RC_NO_SUCH_OBJECT 101&lt;br /&gt;
 #define RC_EMAIL_MISSING_DOT 102&lt;br /&gt;
 #define RC_NOT_DELETE_OWNER 102&lt;br /&gt;
 #define RC_EMAIL_MISSING_AT 103&lt;br /&gt;
 #define RC_EMAIL_STARTS_WITH_BLANK 104&lt;br /&gt;
 #define RC_EMAIL_TOO_LONG 105&lt;br /&gt;
 #define RC_EMAIL_TOO_SHORT 106&lt;br /&gt;
 #define RC_NAME_ALREADY_USED 107&lt;br /&gt;
 #define RC_NAME_CONTAINS_NONALPHANUMERIC_CHAR 108&lt;br /&gt;
 #define RC_NAME_CONTAINS_INVALID_BLANK 109&lt;br /&gt;
 #define RC_NAME_DOESNT_EXIST 110&lt;br /&gt;
 #define RC_NAME_ENDS_WITH_BLANK 111&lt;br /&gt;
 #define RC_NAME_TOO_LONG 112&lt;br /&gt;
 #define RC_NAME_TOO_SHORT 113&lt;br /&gt;
 #define RC_NAME_UNUSED 114&lt;br /&gt;
 #define RC_PASSWORD_TOO_LONG 115&lt;br /&gt;
 #define RC_PASSWORD_TOO_SHORT 116&lt;br /&gt;
 #define RC_PASSWORD_WRONG 117&lt;br /&gt;
 #define RC_UNABLE_TO_DELETE_NAME 119&lt;br /&gt;
 #define RC_UNABLE_TO_GET_CITIZEN 120&lt;br /&gt;
 #define RC_UNABLE_TO_INSERT_CITIZEN 121&lt;br /&gt;
 #define RC_UNABLE_TO_INSERT_NAME 122&lt;br /&gt;
 #define RC_UNABLE_TO_PUT_CITIZEN_COUNT 123&lt;br /&gt;
 #define RC_UNABLE_TO_DELETE_CITIZEN 124&lt;br /&gt;
 #define RC_NUMBER_ALREADY_USED 126&lt;br /&gt;
 #define RC_NUMBER_OUT_OF_RANGE 127&lt;br /&gt;
 #define RC_PRIVILEGE_PASSWORD_IS_TOO_SHORT 128&lt;br /&gt;
 #define RC_PRIVILEGE_PASSWORD_IS_TOO_LONG 129&lt;br /&gt;
 #define RC_NOT_CHANGE_OWNER 203&lt;br /&gt;
 #define RC_CANT_FIND_OLD_ELEMENT 204&lt;br /&gt;
 #define RC_UNABLE_TO_CHANGE_ATTRIBUTE 210&lt;br /&gt;
 #define RC_CANT_CHANGE_OWNER 211&lt;br /&gt;
 #define RC_IMPOSTER 212&lt;br /&gt;
 #define RC_INVALID_REQUEST 213&lt;br /&gt;
 #define RC_CANT_BUILD_HERE 216&lt;br /&gt;
 #define RC_ENCROACHES 300&lt;br /&gt;
 #define RC_OBJECT_TYPE_INVALID 301&lt;br /&gt;
 #define RC_TOO_MANY_BYTES 303&lt;br /&gt;
 #define RC_UNABLE_TO_STORE 305&lt;br /&gt;
 #define RC_UNREGISTERED_OBJECT 306&lt;br /&gt;
 #define RC_ELEMENT_ALREADY_EXISTS 308&lt;br /&gt;
 #define RC_RESTRICTED_COMMAND 309&lt;br /&gt;
 #define RC_NO_BUILD_RIGHTS 310&lt;br /&gt;
 #define RC_OUT_OF_BOUNDS 311&lt;br /&gt;
 #define RC_RESTRICTED_OBJECT 313&lt;br /&gt;
 #define RC_RESTRICTED_AREA 314&lt;br /&gt;
 #define RC_OUT_OF_MEMORY 400&lt;br /&gt;
 #define RC_NOT_YET 401&lt;br /&gt;
 #define RC_TIMEOUT 402&lt;br /&gt;
 #define RC_NULL_POINTER 403&lt;br /&gt;
 #define RC_UNABLE_TO_CONTACT_UNIVERSE 404&lt;br /&gt;
 #define RC_UNABLE_TO_CONTACT_WORLD 405&lt;br /&gt;
 #define RC_INVALID_WORLD_NAME 406&lt;br /&gt;
 #define RC_SEND_FAILED 415&lt;br /&gt;
 #define RC_RECEIVE_FAILED 416&lt;br /&gt;
 #define RC_STREAM_EMPTY 421&lt;br /&gt;
 #define RC_STREAM_MESSAGE_TOO_LONG 422&lt;br /&gt;
 #define RC_WORLD_NAME_TOO_LONG 423&lt;br /&gt;
 #define RC_MESSAGE_TOO_LONG 426&lt;br /&gt;
 #define RC_TOO_MANY_RESETS 427&lt;br /&gt;
 #define RC_UNABLE_TO_CREATE_SOCKET 428&lt;br /&gt;
 #define RC_UNABLE_TO_CONNECT 429&lt;br /&gt;
 #define RC_UNABLE_TO_SET_NONBLOCKING 430&lt;br /&gt;
 #define RC_CANT_OPEN_STREAM 434&lt;br /&gt;
 #define RC_CANT_WRITE_STREAM 435&lt;br /&gt;
 #define RC_CANT_CLOSE_STREAM 436&lt;br /&gt;
 #define RC_NO_CONNECTION 439&lt;br /&gt;
 #define RC_UNABLE_TO_INITIALIZE_NETWORK 442&lt;br /&gt;
 #define RC_INCORRECT_MESSAGE_LENGTH 443&lt;br /&gt;
 #define RC_NOT_INITIALIZED 444&lt;br /&gt;
 #define RC_NO_INSTANCE 445&lt;br /&gt;
 #define RC_OUT_BUFFER_FULL 446&lt;br /&gt;
 #define RC_INVALID_CALLBACK 447&lt;br /&gt;
 #define RC_INVALID_ATTRIBUTE 448&lt;br /&gt;
 #define RC_TYPE_MISMATCH 449&lt;br /&gt;
 #define RC_STRING_TOO_LONG 450&lt;br /&gt;
 #define RC_READ_ONLY 451&lt;br /&gt;
 #define RC_UNABLE_TO_REGISTER_RESOLVE 452&lt;br /&gt;
 #define RC_INVALID_INSTANCE 453&lt;br /&gt;
 #define RC_VERSION_MISMATCH 454&lt;br /&gt;
 #define RC_IN_BUFFER_FULL 461&lt;br /&gt;
 #define RC_PROTOCOL_ERROR 463&lt;br /&gt;
 #define RC_QUERY_IN_PROGRESS 464&lt;br /&gt;
 #define RC_WORLD_FULL 465&lt;br /&gt;
 #define RC_EJECTED 466&lt;br /&gt;
 #define RC_NOT_WELCOME 467&lt;br /&gt;
 #define RC_UNABLE_TO_BIND 468&lt;br /&gt;
 #define RC_UNABLE_TO_LISTEN 469&lt;br /&gt;
 #define RC_UNABLE_TO_ACCEPT 470&lt;br /&gt;
 #define RC_CONNECTION_LOST 471&lt;br /&gt;
 #define RC_NO_STREAM 473&lt;br /&gt;
 #define RC_NOT_AVAILABLE 474&lt;br /&gt;
 #define RC_OLD_UNIVERSE 487&lt;br /&gt;
 #define RC_OLD_WORLD 488&lt;br /&gt;
 #define RC_WORLD_NOT_RUNNING 489&lt;br /&gt;
 #define RC_CANT_RESOLVE_UNIVERSE_HOST 500&lt;br /&gt;
 #define RC_INVALID_ARGUMENT 505&lt;br /&gt;
 #define RC_WORLD_INSTANCE_ALREADY_EXISTS 521&lt;br /&gt;
 #define RC_WORLD_INSTANCE_INVALID 522&lt;br /&gt;
 #define RC_EMAIL_CHANGE_NOT_ALLOWED 525&lt;br /&gt;
 #define RC_NAME_CHANGE_NOT_ALLOWED 526&lt;br /&gt;
 #define RC_EMAIL_ALREADY_USED 527&lt;br /&gt;
 #define RC_EMAIL_NOT_ALLOWED 528&lt;br /&gt;
 #define RC_WORLD_REDIRECT 529&lt;br /&gt;
 #define RC_DATABASE_ERROR 600&lt;br /&gt;
&lt;br /&gt;
[[Category: Lists]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=SDK_Reason_Codes&amp;diff=194</id>
		<title>SDK Reason Codes</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=SDK_Reason_Codes&amp;diff=194"/>
		<updated>2025-04-07T19:24:14Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;__TOC__  ==Current version==  &amp;lt;table class=&amp;quot;sortable&amp;quot; border=&amp;quot;border&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt; &amp;lt;tr&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;30%&amp;quot;&amp;gt;Reason code&amp;lt;/th&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Value&amp;lt;/th&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;60%&amp;quot;&amp;gt;Description&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;  &amp;lt;tr&amp;gt; &amp;lt;td id=&amp;quot;RC_SUCCESS&amp;quot;&amp;gt;RC_SUCCESS&amp;lt;/td&amp;gt; &amp;lt;td id=&amp;quot;NO_0&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&amp;#039;&amp;#039;Success&amp;#039;&amp;#039; :&amp;lt;table&amp;gt; &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Return value from an asynchronous call:&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;20&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Request has been sent to the server.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Current version==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;sortable&amp;quot; border=&amp;quot;border&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;30%&amp;quot;&amp;gt;Reason code&amp;lt;/th&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Value&amp;lt;/th&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;60%&amp;quot;&amp;gt;Description&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_SUCCESS&amp;quot;&amp;gt;RC_SUCCESS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_0&amp;quot;&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Success&#039;&#039;&lt;br /&gt;
:&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Return value from an asynchronous call:&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;20&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Request has been sent to the server.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Return value from a blocking call:&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;20&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Operation has completed successfully.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;When passed to a callback:&amp;lt;/td&amp;gt;&amp;lt;td width=&amp;quot;20&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Operation has completed successfully.&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CITIZENSHIP_EXPIRED&amp;quot;&amp;gt;RC_CITIZENSHIP_EXPIRED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_1&amp;quot;&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Citizenship has expired&#039;&#039;&lt;br /&gt;
:Citizenship of the owner has expired.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LAND_LIMIT_EXCEEDED&amp;quot;&amp;gt;RC_LAND_LIMIT_EXCEEDED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_2&amp;quot;&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Land limit exceeded&#039;&#039;&lt;br /&gt;
:Land limit of the universe would be exceeded if the world is started.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_SUCH_CITIZEN&amp;quot;&amp;gt;RC_NO_SUCH_CITIZEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_3&amp;quot;&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;No such citizen&#039;&#039;&lt;br /&gt;
:No citizenship with a matching citizen number was found.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_PASSWORD_CONTAINS_SPACE&amp;quot;&amp;gt;RC_LICENSE_PASSWORD_CONTAINS_SPACE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_5&amp;quot;&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;License password contains space&#039;&#039;&lt;br /&gt;
:Password cannot contain a space.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_PASSWORD_TOO_LONG&amp;quot;&amp;gt;RC_LICENSE_PASSWORD_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_6&amp;quot;&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;License password too long&#039;&#039;&lt;br /&gt;
:Password cannot be longer than 8 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_PASSWORD_TOO_SHORT&amp;quot;&amp;gt;RC_LICENSE_PASSWORD_TOO_SHORT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_7&amp;quot;&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;License password too short&#039;&#039;&lt;br /&gt;
:Password must be at least 2 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_RANGE_TOO_LARGE&amp;quot;&amp;gt;RC_LICENSE_RANGE_TOO_LARGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_8&amp;quot;&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;License range too large&#039;&#039;&lt;br /&gt;
:Range must be smaller than 3275 hectometers. That is, at most 32750 coordinates N/S/W/E or 655000 meters across.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_RANGE_TOO_SMALL&amp;quot;&amp;gt;RC_LICENSE_RANGE_TOO_SMALL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_9&amp;quot;&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;License range too small&#039;&#039;&lt;br /&gt;
:Range must be larger than 0 hectometers. That is, at least 10 coordinates N/S/W/E or 200 meters across.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_USERS_TOO_LARGE&amp;quot;&amp;gt;RC_LICENSE_USERS_TOO_LARGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_10&amp;quot;&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;License users too large&#039;&#039;&lt;br /&gt;
:User limit cannot exceed 1024.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_USERS_TOO_SMALL&amp;quot;&amp;gt;RC_LICENSE_USERS_TOO_SMALL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_11&amp;quot;&amp;gt;11&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;License users too small&#039;&#039;&lt;br /&gt;
:User limit must be larger than 0.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INVALID_PASSWORD&amp;quot;&amp;gt;RC_INVALID_PASSWORD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_13&amp;quot;&amp;gt;13&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Invalid password&#039;&#039;&lt;br /&gt;
:Unable to login due to invalid password.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_WORLD_TOO_SHORT&amp;quot;&amp;gt;RC_LICENSE_WORLD_TOO_SHORT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_15&amp;quot;&amp;gt;15&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;License world too short&#039;&#039;&lt;br /&gt;
:Name must be at least 2 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_WORLD_TOO_LONG&amp;quot;&amp;gt;RC_LICENSE_WORLD_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_16&amp;quot;&amp;gt;16&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;License world too long&#039;&#039;&lt;br /&gt;
:Name cannot be longer than 8 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_MUST_UPGRADE&amp;quot;&amp;gt;RC_MUST_UPGRADE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_18&amp;quot;&amp;gt;18&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;SDK update required&#039;&#039;&lt;br /&gt;
:The used SDK build is obsolete. Update to recent SDK build number. Similar to RC#58.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INVALID_WORLD&amp;quot;&amp;gt;RC_INVALID_WORLD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_20&amp;quot;&amp;gt;20&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Invalid world&#039;&#039;&lt;br /&gt;
:Unable to start the world due to invalid name or password.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_SERVER_OUTDATED&amp;quot;&amp;gt;RC_SERVER_OUTDATED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_21&amp;quot;&amp;gt;21&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Server outdated&#039;&#039;&lt;br /&gt;
:Server build either contains a serious flaw or is outdated and must be upgraded.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_ALREADY_STARTED&amp;quot;&amp;gt;RC_WORLD_ALREADY_STARTED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_22&amp;quot;&amp;gt;22&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;World already started&#039;&#039;&lt;br /&gt;
:World has already been started at a different location.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_SUCH_WORLD&amp;quot;&amp;gt;RC_NO_SUCH_WORLD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_27&amp;quot;&amp;gt;27&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;No such world&#039;&#039;&lt;br /&gt;
:No world with a matching name has been started on the server.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNAUTHORIZED&amp;quot;&amp;gt;RC_UNAUTHORIZED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_32&amp;quot;&amp;gt;32&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Unauthorized&#039;&#039;&lt;br /&gt;
:Not authorized to perform the operation.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_SUCH_LICENSE&amp;quot;&amp;gt;RC_NO_SUCH_LICENSE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_34&amp;quot;&amp;gt;34&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;No such license&#039;&#039;&lt;br /&gt;
:No license with a matching world name was found.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_TOO_MANY_WORLDS&amp;quot;&amp;gt;RC_TOO_MANY_WORLDS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_57&amp;quot;&amp;gt;57&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Too many worlds&#039;&#039;&lt;br /&gt;
:Limit of started worlds in the universe would be exceeded if the world is started.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_MUST_UPGRADE&amp;quot;&amp;gt;RC_MUST_UPGRADE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_58&amp;quot;&amp;gt;58&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Must upgrade&#039;&#039;&lt;br /&gt;
:SDK build either contains a serious flaw or is outdated and must be upgraded.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_BOT_LIMIT_EXCEEDED&amp;quot;&amp;gt;RC_BOT_LIMIT_EXCEEDED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_59&amp;quot;&amp;gt;59&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Bot limit exceeded&#039;&#039;&lt;br /&gt;
:Bot limit of the owner citizenship would be exceeded if the bot is logged in.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_EXPIRED&amp;quot;&amp;gt;RC_WORLD_EXPIRED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_61&amp;quot;&amp;gt;61&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;World expired&#039;&#039;&lt;br /&gt;
:Unable to start world due to its license having expired.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CITIZEN_DOES_NOT_EXPIRE&amp;quot;&amp;gt;RC_CITIZEN_DOES_NOT_EXPIRE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_62&amp;quot;&amp;gt;62&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;P&amp;gt;&#039;&#039;Citizen does not expire&#039;&#039;&lt;br /&gt;
:TODO: What is this used for?&amp;lt;/P&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_STARTS_WITH_NUMBER&amp;quot;&amp;gt;RC_LICENSE_STARTS_WITH_NUMBER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_64&amp;quot;&amp;gt;64&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;License starts with number&#039;&#039;&lt;br /&gt;
:Name cannot start with a number.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_SUCH_EJECTION&amp;quot;&amp;gt;RC_NO_SUCH_EJECTION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_66&amp;quot;&amp;gt;66&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;No such ejection&#039;&#039;&lt;br /&gt;
:No ejection with a matching identifier was found.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_SUCH_SESSION&amp;quot;&amp;gt;RC_NO_SUCH_SESSION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_67&amp;quot;&amp;gt;67&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;No such session&#039;&#039;&lt;br /&gt;
:No user with a matching session number has entered the world.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_RUNNING&amp;quot;&amp;gt;RC_WORLD_RUNNING&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_72&amp;quot;&amp;gt;72&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;World running&#039;&#039;&lt;br /&gt;
:World has already been started.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_NOT_SET&amp;quot;&amp;gt;RC_WORLD_NOT_SET&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_73&amp;quot;&amp;gt;73&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;World not set&#039;&#039;&lt;br /&gt;
:World to perform the operation on has not been set.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_SUCH_CELL&amp;quot;&amp;gt;RC_NO_SUCH_CELL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_74&amp;quot;&amp;gt;74&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;No such cell&#039;&#039;&lt;br /&gt;
:No more cells left to enumerate.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_REGISTRY&amp;quot;&amp;gt;RC_NO_REGISTRY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_75&amp;quot;&amp;gt;75&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;No registry&#039;&#039;&lt;br /&gt;
:Unable to start world due to missing or invalid registry.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CANT_OPEN_REGISTRY&amp;quot;&amp;gt;RC_CANT_OPEN_REGISTRY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_76&amp;quot;&amp;gt;76&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Can&#039;t open registry&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CITIZEN_DISABLED&amp;quot;&amp;gt;RC_CITIZEN_DISABLED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_77&amp;quot;&amp;gt;77&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Citizen disabled&#039;&#039;&lt;br /&gt;
:Citizenship of the owner has been disabled.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_DISABLED&amp;quot;&amp;gt;RC_WORLD_DISABLED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_78&amp;quot;&amp;gt;78&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;World disabled&#039;&#039;&lt;br /&gt;
:Unable to start world due to it being disabled.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_TELEGRAM_BLOCKED&amp;quot;&amp;gt;RC_TELEGRAM_BLOCKED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_85&amp;quot;&amp;gt;85&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Telegram blocked&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_UPDATE_TERRAIN&amp;quot;&amp;gt;RC_UNABLE_TO_UPDATE_TERRAIN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_88&amp;quot;&amp;gt;88&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to update terrain&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EMAIL_CONTAINS_INVALID_CHAR&amp;quot;&amp;gt;RC_EMAIL_CONTAINS_INVALID_CHAR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_100&amp;quot;&amp;gt;100&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Email contains invalid char&#039;&#039;&lt;br /&gt;
:Email address contains one or more invalid characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EMAIL_ENDS_WITH_BLANK&amp;quot;&amp;gt;RC_EMAIL_ENDS_WITH_BLANK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_101&amp;quot;&amp;gt;101&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Email ends with blank&#039;&#039;&lt;br /&gt;
:Email address cannot end with a blank.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_SUCH_OBJECT&amp;quot;&amp;gt;RC_NO_SUCH_OBJECT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_101b&amp;quot;&amp;gt;101&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;No such object&#039;&#039;&lt;br /&gt;
:Unable to find the object to delete.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EMAIL_MISSING_DOT&amp;quot;&amp;gt;RC_EMAIL_MISSING_DOT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_102&amp;quot;&amp;gt;102&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Email missing dot&#039;&#039;&lt;br /&gt;
:Email address must contain at least one &#039;.&#039;.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NOT_DELETE_OWNER&amp;quot;&amp;gt;RC_NOT_DELETE_OWNER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_102b&amp;quot;&amp;gt;102&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Not delete owner&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EMAIL_MISSING_AT&amp;quot;&amp;gt;RC_EMAIL_MISSING_AT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_103&amp;quot;&amp;gt;103&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Email missing at&#039;&#039;&lt;br /&gt;
:Email address must contain a &#039;@&#039;.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EMAIL_STARTS_WITH_BLANK&amp;quot;&amp;gt;RC_EMAIL_STARTS_WITH_BLANK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_104&amp;quot;&amp;gt;104&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Email starts with blank&#039;&#039;&lt;br /&gt;
:Email address cannot start with a blank.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EMAIL_TOO_LONG&amp;quot;&amp;gt;RC_EMAIL_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_105&amp;quot;&amp;gt;105&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Email too long&#039;&#039;&lt;br /&gt;
:Email address cannot be longer than 50 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EMAIL_TOO_SHORT&amp;quot;&amp;gt;RC_EMAIL_TOO_SHORT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_106&amp;quot;&amp;gt;106&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Email too short&#039;&#039;&lt;br /&gt;
:Email address must be at least 8 characters or longer.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NAME_ALREADY_USED&amp;quot;&amp;gt;RC_NAME_ALREADY_USED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_107&amp;quot;&amp;gt;107&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Name already used&#039;&#039;&lt;br /&gt;
:Citizenship with a matching name already exists.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NAME_CONTAINS_NONALPHANUMERIC_CHAR&amp;quot;&amp;gt;RC_NAME_CONTAINS_NONALPHANUMERIC_CHAR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_108&amp;quot;&amp;gt;108&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Name contains nonalphanumeric character&#039;&#039;&lt;br /&gt;
:Name contains invalid character(s).&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NAME_CONTAINS_INVALID_BLANK&amp;quot;&amp;gt;RC_NAME_CONTAINS_INVALID_BLANK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_109&amp;quot;&amp;gt;109&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Name contains invalid blank&#039;&#039;&lt;br /&gt;
:Name contains invalid blank(s).&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NAME_ENDS_WITH_BLANK&amp;quot;&amp;gt;RC_NAME_ENDS_WITH_BLANK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_111&amp;quot;&amp;gt;111&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Name ends with blank&#039;&#039;&lt;br /&gt;
:Name cannot end with a blank.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NAME_TOO_LONG&amp;quot;&amp;gt;RC_NAME_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_112&amp;quot;&amp;gt;112&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Name too long&#039;&#039;&lt;br /&gt;
:Name cannot be longer than 20 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NAME_TOO_SHORT&amp;quot;&amp;gt;RC_NAME_TOO_SHORT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_113&amp;quot;&amp;gt;113&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Name too short&#039;&#039;&lt;br /&gt;
:Name must be at least 4 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_PASSWORD_TOO_LONG&amp;quot;&amp;gt;RC_PASSWORD_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_115&amp;quot;&amp;gt;115&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Password too long&#039;&#039;&lt;br /&gt;
:Password cannot be longer than 16 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_PASSWORD_TOO_SHORT&amp;quot;&amp;gt;RC_PASSWORD_TOO_SHORT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_116&amp;quot;&amp;gt;116&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Password too short&#039;&#039;&lt;br /&gt;
:Password must be at least 8 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_DELETE_CITIZEN&amp;quot;&amp;gt;RC_UNABLE_TO_DELETE_CITIZEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_124&amp;quot;&amp;gt;124&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Unable to delete citizen&#039;&#039;&lt;br /&gt;
:Unable to delete citizen due to a database problem.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NUMBER_ALREADY_USED&amp;quot;&amp;gt;RC_NUMBER_ALREADY_USED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_126&amp;quot;&amp;gt;126&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Number already used&#039;&#039;&lt;br /&gt;
:Citizenship with a matching citizen number already exists.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NUMBER_OUT_OF_RANGE&amp;quot;&amp;gt;RC_NUMBER_OUT_OF_RANGE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_127&amp;quot;&amp;gt;127&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Number out of range&#039;&#039;&lt;br /&gt;
:Citizen number is larger than the auto-incremented field in the database.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_PRIVILEGE_PASSWORD_IS_TOO_SHORT&amp;quot;&amp;gt;RC_PRIVILEGE_PASSWORD_IS_TOO_SHORT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_128&amp;quot;&amp;gt;128&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Privilege password is too short&#039;&#039;&lt;br /&gt;
:Privilege password must be either empty or at least 4 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_PRIVILEGE_PASSWORD_IS_TOO_LONG&amp;quot;&amp;gt;RC_PRIVILEGE_PASSWORD_IS_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_129&amp;quot;&amp;gt;129&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Privilege password is too long&#039;&#039;&lt;br /&gt;
:Password cannot be longer than 12 characters.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NOT_CHANGE_OWNER&amp;quot;&amp;gt;RC_NOT_CHANGE_OWNER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_203&amp;quot;&amp;gt;203&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Not change owner&#039;&#039;&lt;br /&gt;
:Not permitted to change the owner of an object. It requires eminent domain or caretaker capability.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CANT_FIND_OLD_ELEMENT&amp;quot;&amp;gt;RC_CANT_FIND_OLD_ELEMENT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_204&amp;quot;&amp;gt;204&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Can&#039;t find old element&#039;&#039;&lt;br /&gt;
:Unable to find the object to change.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_IMPOSTER&amp;quot;&amp;gt;RC_IMPOSTER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_212&amp;quot;&amp;gt;212&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Imposter&#039;&#039;&lt;br /&gt;
:Unable to enter world due to masquerading as someone else.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_ENCROACHES&amp;quot;&amp;gt;RC_ENCROACHES&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_300&amp;quot;&amp;gt;300&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Encroaches&#039;&#039;&lt;br /&gt;
:Not allowed to encroach into another&#039;s property.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_OBJECT_TYPE_INVALID&amp;quot;&amp;gt;RC_OBJECT_TYPE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_301&amp;quot;&amp;gt;301&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Object type invalid&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_TOO_MANY_BYTES&amp;quot;&amp;gt;RC_TOO_MANY_BYTES&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_303&amp;quot;&amp;gt;303&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Too many bytes&#039;&#039;&lt;br /&gt;
:Cell limit would be exceeded.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNREGISTERED_OBJECT&amp;quot;&amp;gt;RC_UNREGISTERED_OBJECT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_306&amp;quot;&amp;gt;306&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Unregistered object&#039;&#039;&lt;br /&gt;
:Model name does not exist in the registry.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_ELEMENT_ALREADY_EXISTS&amp;quot;&amp;gt;RC_ELEMENT_ALREADY_EXISTS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_308&amp;quot;&amp;gt;308&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Element already exists&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_RESTRICTED_COMMAND&amp;quot;&amp;gt;RC_RESTRICTED_COMMAND&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_309&amp;quot;&amp;gt;309&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Restricted command&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_OUT_OF_BOUNDS&amp;quot;&amp;gt;RC_OUT_OF_BOUNDS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_311&amp;quot;&amp;gt;311&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Out of bounds&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_RESTRICTED_OBJECT&amp;quot;&amp;gt;RC_RESTRICTED_OBJECT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_313&amp;quot;&amp;gt;313&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Restricted object&#039;&#039;&lt;br /&gt;
:Not allowed to build with &#039;z&#039; objects in this world. [the same error code is used for V4 objects]&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_RESTRICTED_AREA&amp;quot;&amp;gt;RC_RESTRICTED_AREA&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_314&amp;quot;&amp;gt;314&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Restricted area&#039;&#039;&lt;br /&gt;
:Not allowed to build within the restricted area of this world.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NOT_YET&amp;quot;&amp;gt;RC_NOT_YET&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_401&amp;quot;&amp;gt;401&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Not yet&#039;&#039;&lt;br /&gt;
:Would exceed the maximum number of operations per second.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_TIMEOUT&amp;quot;&amp;gt;RC_TIMEOUT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_402&amp;quot;&amp;gt;402&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Timeout&#039;&#039;&lt;br /&gt;
:Synchronous operation timed out.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_CONTACT_UNIVERSE&amp;quot;&amp;gt;RC_UNABLE_TO_CONTACT_UNIVERSE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_404&amp;quot;&amp;gt;404&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Unable to contact universe&#039;&#039;&lt;br /&gt;
:Unable to establish a connection to the universe server.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_CONNECTION&amp;quot;&amp;gt;RC_NO_CONNECTION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_439&amp;quot;&amp;gt;439&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;No connection&#039;&#039;&lt;br /&gt;
:Connection to the server is down.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NOT_INITIALIZED&amp;quot;&amp;gt;RC_NOT_INITIALIZED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_444&amp;quot;&amp;gt;444&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Not initialized&#039;&#039;&lt;br /&gt;
:SDK API has not been initialized (by calling [[aw_init]]).&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_INSTANCE&amp;quot;&amp;gt;RC_NO_INSTANCE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_445&amp;quot;&amp;gt;445&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;No instance&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INVALID_ATTRIBUTE&amp;quot;&amp;gt;RC_INVALID_ATTRIBUTE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_448&amp;quot;&amp;gt;448&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Invalid attribute&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_TYPE_MISMATCH&amp;quot;&amp;gt;RC_TYPE_MISMATCH&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_449&amp;quot;&amp;gt;449&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Type mismatch&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_STRING_TOO_LONG&amp;quot;&amp;gt;RC_STRING_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_450&amp;quot;&amp;gt;450&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;String too long&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_READ_ONLY&amp;quot;&amp;gt;RC_READ_ONLY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_451&amp;quot;&amp;gt;451&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Read only&#039;&#039;&lt;br /&gt;
:Unable to set attribute due to it being read-only.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INVALID_INSTANCE&amp;quot;&amp;gt;RC_INVALID_INSTANCE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_453&amp;quot;&amp;gt;453&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Invalid instance&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_VERSION_MISMATCH&amp;quot;&amp;gt;RC_VERSION_MISMATCH&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_454&amp;quot;&amp;gt;454&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Version mismatch&#039;&#039;&lt;br /&gt;
:Aw.h and Aw.dll (or libaw_sdk.so for Linux) are from different builds of the SDK.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_QUERY_IN_PROGRESS&amp;quot;&amp;gt;RC_QUERY_IN_PROGRESS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_464&amp;quot;&amp;gt;464&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Query in progress&#039;&#039;&lt;br /&gt;
:A property query is already in progress.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EJECTED&amp;quot;&amp;gt;RC_EJECTED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_466&amp;quot;&amp;gt;466&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Ejected&#039;&#039;&lt;br /&gt;
:Disconnected from world due to ejection.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NOT_WELCOME&amp;quot;&amp;gt;RC_NOT_WELCOME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_467&amp;quot;&amp;gt;467&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Not welcome&#039;&#039;&lt;br /&gt;
:Citizenship of the owner does not have bot rights in the world.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CONNECTION_LOST&amp;quot;&amp;gt;RC_CONNECTION_LOST&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_471&amp;quot;&amp;gt;471&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Connection lost&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NOT_AVAILABLE&amp;quot;&amp;gt;RC_NOT_AVAILABLE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_474&amp;quot;&amp;gt;474&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Not available&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CANT_RESOLVE_UNIVERSE_HOST&amp;quot;&amp;gt;RC_CANT_RESOLVE_UNIVERSE_HOST&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_500&amp;quot;&amp;gt;500&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Can&#039;t resolve universe host&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INVALID_ARGUMENT&amp;quot;&amp;gt;RC_INVALID_ARGUMENT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_505&amp;quot;&amp;gt;505&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Invalid argument&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_UPDATE_CAV&amp;quot;&amp;gt;RC_UNABLE_TO_UPDATE_CAV&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_514&amp;quot;&amp;gt;514&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to update custom avatar&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_DELETE_CAV&amp;quot;&amp;gt;RC_UNABLE_TO_DELETE_CAV&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_515&amp;quot;&amp;gt;515&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to delete custom avatar&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_SUCH_CAV&amp;quot;&amp;gt;RC_NO_SUCH_CAV&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_516&amp;quot;&amp;gt;516&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;No such custom avatar&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_INSTANCE_ALREADY_EXISTS&amp;quot;&amp;gt;RC_WORLD_INSTANCE_ALREADY_EXISTS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_521&amp;quot;&amp;gt;521&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;World instance already exists&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_INSTANCE_INVALID&amp;quot;&amp;gt;RC_WORLD_INSTANCE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_522&amp;quot;&amp;gt;522&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;World instance invalid&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_PLUGIN_NOT_AVAILABLE&amp;quot;&amp;gt;RC_PLUGIN_NOT_AVAILABLE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_523&amp;quot;&amp;gt;523&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Plugin not available&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_DATABASE_ERROR&amp;quot;&amp;gt;RC_DATABASE_ERROR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_600&amp;quot;&amp;gt;600&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Database error&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_Z_BUF_ERROR&amp;quot;&amp;gt;RC_Z_BUF_ERROR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_4995&amp;quot;&amp;gt;4995&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Buffer error (zlib)&#039;&#039;&lt;br /&gt;
:Not enough room in the output buffer.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_Z_MEM_ERROR&amp;quot;&amp;gt;RC_Z_MEM_ERROR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_4996&amp;quot;&amp;gt;4996&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Memory error (zlib)&#039;&#039;&lt;br /&gt;
:Memory could not be allocated for processing.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_Z_DATA_ERROR&amp;quot;&amp;gt;RC_Z_DATA_ERROR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;NO_4997&amp;quot;&amp;gt;4997&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Data error (zlib)&#039;&#039;&lt;br /&gt;
:Input data was corrupted.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Addition older reason codes, not used by the free SDK==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;sortable&amp;quot; border=&amp;quot;border&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;30%&amp;quot;&amp;gt;Reason code&amp;lt;/th&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Value&amp;lt;/th&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;60%&amp;quot;&amp;gt;Description&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_MESSAGE_LENGTH_BAD&amp;quot;&amp;gt;RC_MESSAGE_LENGTH_BAD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Message length bad&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_LICENSE_CONTAINS_INVALID_CHAR&amp;quot;&amp;gt;RC_LICENSE_CONTAINS_INVALID_CHAR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;12&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;License contains invalid character&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_SERVER_OUT_OF_MEMORY&amp;quot;&amp;gt;RC_SERVER_OUT_OF_MEMORY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;17&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Server out of memory&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NOT_LOGGED_IN&amp;quot;&amp;gt;RC_NOT_LOGGED_IN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;31&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Not logged in&#039;&#039;&lt;br /&gt;
:Must be logged in to perform the operation.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_ALREADY_EXISTS&amp;quot;&amp;gt;RC_WORLD_ALREADY_EXISTS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;33&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;World already exists&#039;&#039;&lt;br /&gt;
:Name already exists.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_SUCH_ACTING_CITIZEN&amp;quot;&amp;gt;RC_NO_SUCH_ACTING_CITIZEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;42&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;No such acting citizen&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_ACTING_PASSWORD_INVALID&amp;quot;&amp;gt;RC_ACTING_PASSWORD_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;43&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Acting password invalid&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EJECTION_EXPIRED&amp;quot;&amp;gt;RC_EJECTION_EXPIRED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;69&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;P&amp;gt;&#039;&#039;Ejection expired&#039;&#039;&lt;br /&gt;
:Attempting to add an ejection that has already expired.&amp;lt;/P&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_ACTING_CITIZEN_EXPIRED&amp;quot;&amp;gt;RC_ACTING_CITIZEN_EXPIRED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;70&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Acting citizen expired&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_ALREADY_STARTED&amp;quot;&amp;gt;RC_ALREADY_STARTED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;71&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Already started&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_ACTING_CITIZEN_DISABLED&amp;quot;&amp;gt;RC_ACTING_CITIZEN_DISABLED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;80&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Acting citizen disabled&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_TELEGRAM_TOO_LONG&amp;quot;&amp;gt;RC_TELEGRAM_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;86&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Telegram too long&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NAME_DOESNT_EXIST&amp;quot;&amp;gt;RC_NAME_DOESNT_EXIST&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;110&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Name doesn&#039;t exist&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NAME_UNUSED&amp;quot;&amp;gt;RC_NAME_UNUSED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;114&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Name unused&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_PASSWORD_WRONG&amp;quot;&amp;gt;RC_PASSWORD_WRONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;117&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;P&amp;gt;&#039;&#039;Password wrong&#039;&#039;&lt;br /&gt;
:TODO: Where is this used?&amp;lt;/P&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_DELETE_NAME&amp;quot;&amp;gt;RC_UNABLE_TO_DELETE_NAME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;119&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to delete name&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_GET_CITIZEN&amp;quot;&amp;gt;RC_UNABLE_TO_GET_CITIZEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;120&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to get citizen&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_INSERT_CITIZEN&amp;quot;&amp;gt;RC_UNABLE_TO_INSERT_CITIZEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;121&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to insert citizen&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_INSERT_NAME&amp;quot;&amp;gt;RC_UNABLE_TO_INSERT_NAME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;122&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to insert name&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_PUT_CITIZEN_COUNT&amp;quot;&amp;gt;RC_UNABLE_TO_PUT_CITIZEN_COUNT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;123&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to put citizen count&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_CHANGE_ATTRIBUTE&amp;quot;&amp;gt;RC_UNABLE_TO_CHANGE_ATTRIBUTE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;210&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to change attribute&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INVALID_REQUEST&amp;quot;&amp;gt;RC_INVALID_REQUEST&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;213&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Invalid request&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CANT_BUILD_HERE&amp;quot;&amp;gt;RC_CANT_BUILD_HERE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;216&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Can&#039;t build here&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_STORE&amp;quot;&amp;gt;RC_UNABLE_TO_STORE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;305&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to store&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_BUILD_RIGHTS&amp;quot;&amp;gt;RC_NO_BUILD_RIGHTS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;310&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;No build rights&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_OUT_OF_MEMORY&amp;quot;&amp;gt;RC_OUT_OF_MEMORY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;400&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Out of memory&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NULL_POINTER&amp;quot;&amp;gt;RC_NULL_POINTER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;403&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Null pointer&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_CONTACT_WORLD&amp;quot;&amp;gt;RC_UNABLE_TO_CONTACT_WORLD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;405&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to contact world&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INVALID_WORLD_NAME&amp;quot;&amp;gt;RC_INVALID_WORLD_NAME&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;406&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Invalid world name&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_SEND_FAILED&amp;quot;&amp;gt;RC_SEND_FAILED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;415&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Send failed&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_RECEIVE_FAILED&amp;quot;&amp;gt;RC_RECEIVE_FAILED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;416&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Receive failed&#039;&#039;&lt;br /&gt;
:Unable to receive data from network socket.&lt;br /&gt;
&lt;br /&gt;
:This can occur for any number of reasons. But in general, it means some kind of network communication problem has occurred.&lt;br /&gt;
&lt;br /&gt;
:It could be that the peer host has disconnected, peer host failed to respond in time, connection is being blocked by a firewall, or anything else that would interfere with socket communications.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_STREAM_EMPTY&amp;quot;&amp;gt;RC_STREAM_EMPTY&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;421&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Stream empty&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_STREAM_MESSAGE_TOO_LONG&amp;quot;&amp;gt;RC_STREAM_MESSAGE_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;422&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Stream message too long&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_NAME_TOO_LONG&amp;quot;&amp;gt;RC_WORLD_NAME_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;423&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;World name too long&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_MESSAGE_TOO_LONG&amp;quot;&amp;gt;RC_MESSAGE_TOO_LONG&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;426&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Message too long&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_CREATE_SOCKET&amp;quot;&amp;gt;RC_UNABLE_TO_CREATE_SOCKET&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;428&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to create socket&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_CONNECT&amp;quot;&amp;gt;RC_UNABLE_TO_CONNECT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;429&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to connect&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_SET_NONBLOCKING&amp;quot;&amp;gt;RC_UNABLE_TO_SET_NONBLOCKING&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;430&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to set nonblocking&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CANT_OPEN_STREAM&amp;quot;&amp;gt;RC_CANT_OPEN_STREAM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;434&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Can&#039;t open stream&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CANT_WRITE_STREAM&amp;quot;&amp;gt;RC_CANT_WRITE_STREAM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;435&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Can&#039;t write stream&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CANT_CLOSE_STREAM&amp;quot;&amp;gt;RC_CANT_CLOSE_STREAM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;436&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Can&#039;t close stream&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_INITIALIZE_NETWORK&amp;quot;&amp;gt;RC_UNABLE_TO_INITIALIZE_NETWORK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;442&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to initialize network&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INCORRECT_MESSAGE_LENGTH&amp;quot;&amp;gt;RC_INCORRECT_MESSAGE_LENGTH&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;443&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Incorrect message length&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_OUT_BUFFER_FULL&amp;quot;&amp;gt;RC_OUT_BUFFER_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;446&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Out buffer full&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INVALID_CALLBACK&amp;quot;&amp;gt;RC_INVALID_CALLBACK&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;447&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Invalid callback&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_IN_BUFFER_FULL&amp;quot;&amp;gt;RC_IN_BUFFER_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;461&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;In buffer full&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_PROTOCOL_ERROR&amp;quot;&amp;gt;RC_PROTOCOL_ERROR&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;463&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Protocol error&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_STREAM&amp;quot;&amp;gt;RC_NO_STREAM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;473&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;No stream&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_OLD_UNIVERSE&amp;quot;&amp;gt;RC_OLD_UNIVERSE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;487&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Old universe&#039;&#039;&lt;br /&gt;
:Universe is too outdated to be compatible.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_OLD_WORLD&amp;quot;&amp;gt;RC_OLD_WORLD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;488&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;Old world&#039;&#039;&lt;br /&gt;
:World is too outdated to be compatible.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_NOT_RUNNING&amp;quot;&amp;gt;RC_WORLD_NOT_RUNNING&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;489&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;p&amp;gt;&#039;&#039;World not running&#039;&#039;&lt;br /&gt;
:Unable to stop a world that is not running.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Not used by the free SDK==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table class=&amp;quot;sortable&amp;quot; border=&amp;quot;border&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;30%&amp;quot;&amp;gt;Reason code&amp;lt;/th&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;10%&amp;quot;&amp;gt;Value&amp;lt;/th&amp;gt;&amp;lt;th align=&amp;quot;left&amp;quot; width=&amp;quot;60%&amp;quot;&amp;gt;Description&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_MAIL_BACK_NUMBER&amp;quot;&amp;gt;RC_UNABLE_TO_MAIL_BACK_NUMBER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;14&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to mail back number&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_IDENTITY_ALREADY_IN_USE&amp;quot;&amp;gt;RC_IDENTITY_ALREADY_IN_USE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;39&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Identity already in use&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_REPORT_LOCATION&amp;quot;&amp;gt;RC_UNABLE_TO_REPORT_LOCATION&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;40&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to report location&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INVALID_EMAIL&amp;quot;&amp;gt;RC_INVALID_EMAIL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;41&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Invalid email&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNIVERSE_FULL&amp;quot;&amp;gt;RC_UNIVERSE_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;45&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Universe full&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_BILLING_TIMEOUT&amp;quot;&amp;gt;RC_BILLING_TIMEOUT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;46&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Billing timeout&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_BILLING_RECV_FAILED&amp;quot;&amp;gt;RC_BILLING_RECV_FAILED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;47&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Billing recv failed&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_BILLING_RESPONSE_INVALID&amp;quot;&amp;gt;RC_BILLING_RESPONSE_INVALID&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;48&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Billing response invalid&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_BILLING_REJECTED&amp;quot;&amp;gt;RC_BILLING_REJECTED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;55&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Billing rejected&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_BILLING_BLOCKED&amp;quot;&amp;gt;RC_BILLING_BLOCKED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;56&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Billing blocked&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_BETA_REQUIRED&amp;quot;&amp;gt;RC_BETA_REQUIRED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;79&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Beta required&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_INVALID_USER_COUNT&amp;quot;&amp;gt;RC_INVALID_USER_COUNT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;81&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Invalid user count&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_PRIVATE_WORLD&amp;quot;&amp;gt;RC_PRIVATE_WORLD&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;91&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Private world&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NO_TOURISTS&amp;quot;&amp;gt;RC_NO_TOURISTS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;92&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;No tourists&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_CANT_CHANGE_OWNER&amp;quot;&amp;gt;RC_CANT_CHANGE_OWNER&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;211&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Can&#039;t change owner&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_JOIN_REFUSED&amp;quot;&amp;gt;RC_JOIN_REFUSED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;250&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Join refused&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_TOO_MANY_RESETS&amp;quot;&amp;gt;RC_TOO_MANY_RESETS&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;427&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Too many resets&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_REGISTER_RESOLVE&amp;quot;&amp;gt;RC_UNABLE_TO_REGISTER_RESOLVE&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;452&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to register resolve&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_FULL&amp;quot;&amp;gt;RC_WORLD_FULL&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;465&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;World full&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_BIND&amp;quot;&amp;gt;RC_UNABLE_TO_BIND&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;468&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to bind&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_LISTEN&amp;quot;&amp;gt;RC_UNABLE_TO_LISTEN&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;469&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to listen&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_UNABLE_TO_ACCEPT&amp;quot;&amp;gt;RC_UNABLE_TO_ACCEPT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;470&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Unable to accept&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EMAIL_CHANGE_NOT_ALLOWED&amp;quot;&amp;gt;RC_EMAIL_CHANGE_NOT_ALLOWED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;525&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Email change not allowed&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_NAME_CHANGE_NOT_ALLOWED&amp;quot;&amp;gt;RC_NAME_CHANGE_NOT_ALLOWED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;526&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Name change not allowed&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EMAIL_ALREADY_USED&amp;quot;&amp;gt;RC_EMAIL_ALREADY_USED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;527&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Email already used&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_EMAIL_NOT_ALLOWED&amp;quot;&amp;gt;RC_EMAIL_NOT_ALLOWED&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;528&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&#039;&#039;Email not allowed&#039;&#039;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td id=&amp;quot;RC_WORLD_REDIRECT&amp;quot;&amp;gt;RC_WORLD_REDIRECT&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;529&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;P&amp;gt;&#039;&#039;World redirect&#039;&#039;&lt;br /&gt;
:TODO: Is this ever used in the SDK?&amp;lt;/P&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:SDK]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Template:SDK_added_in&amp;diff=193</id>
		<title>Template:SDK added in</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Template:SDK_added_in&amp;diff=193"/>
		<updated>2025-04-07T19:23:34Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;&amp;lt;table id=&amp;quot;toc&amp;quot; style=&amp;quot;width:25em; margin:0 0 0.5em 1em; float:right;&amp;quot;&amp;gt; &amp;lt;tr&amp;gt;&amp;lt;th align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;55bbff&amp;quot; colspan=&amp;quot;3&amp;quot;&amp;gt;Minimum requirements&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt; &amp;lt;tr&amp;gt;&amp;lt;th align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;77ddff&amp;quot; colspan=&amp;quot;3&amp;quot;&amp;gt;Added in version {{{version}}}&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt; {{{sdk{{{sdk|}}}|&amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;right&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;SDK&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; colspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;build {{{sdk}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;}}} {{{world{{{world|}}}|&amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;right&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;World&amp;lt;/td&amp;gt;&amp;lt;td al...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table id=&amp;quot;toc&amp;quot; style=&amp;quot;width:25em; margin:0 0 0.5em 1em; float:right;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;55bbff&amp;quot; colspan=&amp;quot;3&amp;quot;&amp;gt;Minimum requirements&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;77ddff&amp;quot; colspan=&amp;quot;3&amp;quot;&amp;gt;Added in version {{{version}}}&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
{{{sdk{{{sdk|}}}|&amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;right&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;SDK&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; colspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;build {{{sdk}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;}}}&lt;br /&gt;
{{{world{{{world|}}}|&amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;right&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;World&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; colspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;build {{{world}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;}}}&lt;br /&gt;
{{{universe{{{universe|}}}|&amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;right&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;Universe&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; colspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;build {{{universe}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;}}}&lt;br /&gt;
{{{browser{{{browser|}}}|&amp;lt;tr&amp;gt;&amp;lt;td align=&amp;quot;right&amp;quot; valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;&amp;gt;Browser&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;left&amp;quot; colspan=&amp;quot;2&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;build {{{browser}}}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;}}}&lt;br /&gt;
&amp;lt;/table&amp;gt;&amp;lt;includeonly&amp;gt;[[Category:SDK {{{version}}}|{{{sort{{{sort|}}}|{{{sort}}}}}}]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;[[Category: Templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=Aw_init&amp;diff=192</id>
		<title>Aw init</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=Aw_init&amp;diff=192"/>
		<updated>2025-04-07T19:23:02Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;{{SDK added in|version=2.1|sdk=13|world=|universe=|browser=}}  __NOTOC__   int aw_init (int &amp;lt;var&amp;gt;build&amp;lt;/var&amp;gt;)  ==Description== Initializes the SDK.  ==Callback== None (returns immediately)  ==Notes== This method or aw_init_bind must be called once before any other methods in the API. It will do an implicit aw_term if the SDK has already been successfully initialized. Thus, there is no need to call aw_term for each additional call to this method, as there is n...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{SDK added in|version=2.1|sdk=13|world=|universe=|browser=}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
 int aw_init (int &amp;lt;var&amp;gt;build&amp;lt;/var&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
Initializes the SDK.&lt;br /&gt;
&lt;br /&gt;
==Callback==&lt;br /&gt;
None (returns immediately)&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
This method or [[aw_init_bind]] must be called once before any other methods in the API. It will do an implicit [[aw_term]] if the SDK has already been successfully initialized. Thus, there is no need to call [[aw_term]] for each additional call to this method, as there is no reference count.&lt;br /&gt;
&lt;br /&gt;
If successful then the tick count returned by [[aw_tick]] is reset to 0 and the pseudo-random number generator used by [[aw_random]] is seeded.&lt;br /&gt;
&lt;br /&gt;
==Arguments==&lt;br /&gt;
;build:AW_BUILD in Aw.h defines the build of Aw.dll (or libaw_sdk.so for Linux) it was distributed with and should be passed as the value of this argument. &lt;br /&gt;
&lt;br /&gt;
==Argument attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Return values==&lt;br /&gt;
;[[SDK Reason Codes#RC_SUCCESS|RC_SUCCESS]]:&lt;br /&gt;
;[[SDK Reason Codes#RC_VERSION_MISMATCH|RC_VERSION_MISMATCH]]:Aw.h and Aw.dll (or libaw_sdk.so for Linux) are from different builds of the SDK.&lt;br /&gt;
&lt;br /&gt;
==Returned attributes==&lt;br /&gt;
None&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
 #include &amp;quot;Aw.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;[[Reason.h]]&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 int main (int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
   if ([[aw_init]] (AW_BUILD) != [[SDK Reason Codes#RC_SUCCESS|RC_SUCCESS]])&lt;br /&gt;
   {&lt;br /&gt;
     printf (&amp;quot;Build #%d of Aw.dll is required to run this bot.\n&amp;quot;, AW_BUILD);&lt;br /&gt;
     return 1;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   /* ... */&lt;br /&gt;
   &lt;br /&gt;
   [[aw_term]] ();&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[SDK_Application_Structure|Application structure]]&lt;br /&gt;
*[[aw_init_bind]]&lt;br /&gt;
*[[aw_random]]&lt;br /&gt;
*[[aw_term]]&lt;br /&gt;
*[[aw_tick]]&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK Methods|I]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=SDK_Application_Structure&amp;diff=191</id>
		<title>SDK Application Structure</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=SDK_Application_Structure&amp;diff=191"/>
		<updated>2025-04-07T19:22:35Z</updated>

		<summary type="html">&lt;p&gt;Xan: Created page with &amp;quot;A typical SDK application has the following organization:  # &amp;#039;&amp;#039;&amp;#039;Initialization&amp;#039;&amp;#039;&amp;#039; ## Call aw_init to initialize the API ## Call aw_event_set to install event handlers ## Call aw_create to create one or more instances ## Call aw_login for each instance to log that instance into Active Worlds ## Call aw_enter for each instance to enter that instance into a world # &amp;#039;&amp;#039;&amp;#039;Event Loop&amp;#039;&amp;#039;&amp;#039; ## Call aw_wait and res...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A typical [[SDK]] application has the following organization:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Initialization&#039;&#039;&#039;&lt;br /&gt;
## Call [[aw_init]] to initialize the API&lt;br /&gt;
## Call [[aw_event_set]] to install [[SDK Events|event]] handlers&lt;br /&gt;
## Call [[aw_create]] to create one or more [[SDK Multiple Instances|instances]]&lt;br /&gt;
## Call [[aw_login]] for each instance to log that instance into Active Worlds&lt;br /&gt;
## Call [[aw_enter]] for each instance to enter that instance into a world&lt;br /&gt;
# &#039;&#039;&#039;Event Loop&#039;&#039;&#039;&lt;br /&gt;
## Call [[aw_wait]] and respond to events&lt;br /&gt;
# &#039;&#039;&#039;Shut Down&#039;&#039;&#039;&lt;br /&gt;
## Call [[aw_destroy]] to destroy each instance&lt;br /&gt;
## Call [[aw_term]] to shutdown the API&lt;br /&gt;
&lt;br /&gt;
Applications do not necessarily need to follow this structure. However all applications must call [[aw_init]] before calling any other API methods and call [[aw_create]] at least once in order to create an instance.&lt;br /&gt;
&lt;br /&gt;
An &#039;&#039;instance&#039;&#039; refers to a single login session within Active Worlds. Each session has a single connection to the universe server as well as an additional optional connection to a single world server. For example, each time you run the Active Worlds Browser it creates one instance for your login session. A single instance can only be at a single location in a single world at any one time, however an SDK application can create and manage many instances at once.&lt;br /&gt;
&lt;br /&gt;
Instances are allocated and initialized for the application by [[aw_create]], and are destroyed by [[aw_destroy]]. Applications that only use a single instance (the &amp;quot;typical&amp;quot; case) are the easiest to write and do not need to worry about storing or managing the instance handle that is returned by [[aw_create]]. Applications that use multiple instances need to keep track of the instance handles returned by [[aw_create]] and must use [[aw_instance_set]] to specify which instance each particular operation is intended for.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; Botware Inc. wants to have two bots in their world stationed at two different locations, but which share common knowledge of which users have spoken to which bot. Botware implements their bots using a single SDK application which calls [[aw_create]], [[aw_login]], and [[aw_enter]] twice, once for each bot.&lt;br /&gt;
&lt;br /&gt;
An instance must have an owner. An owner is the Active Worlds citizen who owns and is responsible for the instance. The owner is identified during the call to [[aw_create]] by his or her citizen number and privilege password. Keep in mind that a single citizen can only have a limited number of bot instances running in the universe at any one time (typically the limit is 3 although it can be adjusted by the universe administrator.) The instance owner&#039;s citizen number is used to determine permissions and object ownership (if the SDK application builds objects) as if the instance were a regular citizen. Note that an owner does not need to be logged in in order for his or her bots to run.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; Botware Inc. would like their bots to be able to modify signs in their world to point to different advertisers, but they don&#039;t want the public to be able to build in their world. To do this, they have their bots log in as owned by citizen Botware, who has build rights in their world according to the world options.&lt;br /&gt;
&lt;br /&gt;
Note that SDK applications are neither citizens nor tourists, they are a separate class of Active Worlds user. Typically, we just refer to them as &amp;quot;[[bots]].&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[Category:SDK]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=SDK&amp;diff=190</id>
		<title>SDK</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=SDK&amp;diff=190"/>
		<updated>2025-04-07T19:22:02Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ __NOEDITSECTION__ &lt;br /&gt;
&lt;br /&gt;
[[Image:CustomsAide.jpg|right|frame|Screenshot of the Customs Aide bot in AWGate]]&lt;br /&gt;
&lt;br /&gt;
The [[Delta Worlds (software)|Active Worlds]] Software Development Kit (SDK), first released on September 8th, 1998, is a Client-API (Application Interface for programming client applications) targeted at the programmer community within Activeworlds.&lt;br /&gt;
&lt;br /&gt;
It provides an easy way for programmers to develop applications that function within the Active Worlds virtual environment. The most common type of application for the SDK is a bot (typically an avatar that inhabits a virtual world and interacts with users, but which is driven by a computer program instead of a human being), however there are many other potential applications. For example, the SDK could be used to develop an automated program that explores a world and creates a map. Also, the SDK allows universe administrators to develop administration utilities to help manage their own Active Worlds universes.&lt;br /&gt;
&lt;br /&gt;
The core component of the SDK is the file aw.dll, a Windows DLL that implements the entire Active Worlds client/server protocol. To develop an application using the Active Worlds SDK, a programmer simply writes a C program which includes the header file aw.h and links to the import library aw.lib. The compiled executable can be run from any PC anywhere as long as that PC has a network connection to the Active Worlds Universe and aw.dll is available on that PC.&lt;br /&gt;
&lt;br /&gt;
=== SDK Versions ===&lt;br /&gt;
&lt;br /&gt;
The standard C/C++ and [[PHP]]/[[COM SDK|COM]] versions of the SDK are [[#Related_Links| available]]. &lt;br /&gt;
The SDK can be loaded directly from script engines like Python, node.js, PHP, and many more without a wrapper.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First time users of the SDK should start by downloading the version of the SDK appropriate for them, then reading over these help files and reviewing the sample programs.([[SDK Sample Program 1|1]])([[SDK Sample Program 2|2]] and [[PHP]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
===Concepts===&lt;br /&gt;
*[[SDK Application Structure|Structure of an SDK application]]&lt;br /&gt;
*[[SDK Event Handlers|Event handlers]]&lt;br /&gt;
*[[SDK Attributes|Attributes]]&lt;br /&gt;
*[[SDK Multiple Instances|Multiple instances]]&lt;br /&gt;
*[[SDK Asynchronous Operation|Asynchronous operation]]&lt;br /&gt;
*[[SDK Multithreading|Multithreading model]]&lt;br /&gt;
*[[SDK FAQ|Frequently asked questions]]&lt;br /&gt;
*[[SDK Sample Program 1|Sample Program 1]]&lt;br /&gt;
*[[SDK Sample Program 2|Sample Program 2]]&lt;br /&gt;
&lt;br /&gt;
===Uses===&lt;br /&gt;
*[[SDK Property|Property]]&lt;br /&gt;
*[[SDK Terrain|Terrain]]&lt;br /&gt;
*[[Propdump|Property Format &amp;amp; Code Sniplets]]&lt;br /&gt;
*[[Elevdump|Elevation Format &amp;amp; Code Sniplets]]&lt;br /&gt;
*[[Atdump|World Attributes Format &amp;amp; Code Sniplets]]&lt;br /&gt;
*[[HUD]]&lt;br /&gt;
*[[Toolbars]]&lt;br /&gt;
*[[Movers]]&lt;br /&gt;
*[[SDK Global Mode|Global mode]]&lt;br /&gt;
*[[SDK World Server Administration|World server administration]]&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
*[[Attribute|Attributes]]&lt;br /&gt;
*[[List of SDK Data Structures|Data structures]]&lt;br /&gt;
*[[:Category:SDK Events|Events]]&lt;br /&gt;
*[[:Category:SDK Callbacks|Callbacks]]&lt;br /&gt;
*[[:Category:SDK Methods|Methods]]&lt;br /&gt;
*[[SDK Reason Codes|Reason codes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wrappers for Geeks ===&lt;br /&gt;
&lt;br /&gt;
A third-party wrapper of the C/C++ SDK for .NET is available here: https://github.com/Bloyteg/AW.SDK.Core.&lt;br /&gt;
&lt;br /&gt;
A SDK wrapper for the [https://www.autoitscript.com/site/ AutoIt scripting language] along with information on how to use it: https://github.com/locodarwin/AWSDK-For-AutoIt&lt;br /&gt;
&lt;br /&gt;
Further third party wrappers for Python, Perl, LUA and Ruby have been available online, yet aren&#039;t linked to this site.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
*[http://www.activeworlds.com/sdk/download.htm SDK Official download page]&lt;br /&gt;
*[http://wiki.activeworlds.com/index.php?title=SDK Official SDK documentation]&lt;br /&gt;
*[https://github.com/Bloyteg/AW.SDK.Core/ ActiveWorlds SDK .NET Wrapper] - Leads to third party site on GitHub&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
	<entry>
		<id>https://wiki.deltaworlds.com/index.php?title=SDK&amp;diff=189</id>
		<title>SDK</title>
		<link rel="alternate" type="text/html" href="https://wiki.deltaworlds.com/index.php?title=SDK&amp;diff=189"/>
		<updated>2025-04-07T19:21:37Z</updated>

		<summary type="html">&lt;p&gt;Xan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__ __NOEDITSECTION__ &lt;br /&gt;
&lt;br /&gt;
[[Image:CustomsAide.jpg|right|frame|Screenshot of the Customs Aide bot in AWGate]]&lt;br /&gt;
&lt;br /&gt;
The [[Active Worlds (software)|Delta Worlds]] Software Development Kit (SDK), first released on September 8th, 1998, is a Client-API (Application Interface for programming client applications) targeted at the programmer community within Activeworlds.&lt;br /&gt;
&lt;br /&gt;
It provides an easy way for programmers to develop applications that function within the Active Worlds virtual environment. The most common type of application for the SDK is a bot (typically an avatar that inhabits a virtual world and interacts with users, but which is driven by a computer program instead of a human being), however there are many other potential applications. For example, the SDK could be used to develop an automated program that explores a world and creates a map. Also, the SDK allows universe administrators to develop administration utilities to help manage their own Active Worlds universes.&lt;br /&gt;
&lt;br /&gt;
The core component of the SDK is the file aw.dll, a Windows DLL that implements the entire Active Worlds client/server protocol. To develop an application using the Active Worlds SDK, a programmer simply writes a C program which includes the header file aw.h and links to the import library aw.lib. The compiled executable can be run from any PC anywhere as long as that PC has a network connection to the Active Worlds Universe and aw.dll is available on that PC.&lt;br /&gt;
&lt;br /&gt;
=== SDK Versions ===&lt;br /&gt;
&lt;br /&gt;
The standard C/C++ and [[PHP]]/[[COM SDK|COM]] versions of the SDK are [[#Related_Links| available]]. &lt;br /&gt;
The SDK can be loaded directly from script engines like Python, node.js, PHP, and many more without a wrapper.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
First time users of the SDK should start by downloading the version of the SDK appropriate for them, then reading over these help files and reviewing the sample programs.([[SDK Sample Program 1|1]])([[SDK Sample Program 2|2]] and [[PHP]])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
===Concepts===&lt;br /&gt;
*[[SDK Application Structure|Structure of an SDK application]]&lt;br /&gt;
*[[SDK Event Handlers|Event handlers]]&lt;br /&gt;
*[[SDK Attributes|Attributes]]&lt;br /&gt;
*[[SDK Multiple Instances|Multiple instances]]&lt;br /&gt;
*[[SDK Asynchronous Operation|Asynchronous operation]]&lt;br /&gt;
*[[SDK Multithreading|Multithreading model]]&lt;br /&gt;
*[[SDK FAQ|Frequently asked questions]]&lt;br /&gt;
*[[SDK Sample Program 1|Sample Program 1]]&lt;br /&gt;
*[[SDK Sample Program 2|Sample Program 2]]&lt;br /&gt;
&lt;br /&gt;
===Uses===&lt;br /&gt;
*[[SDK Property|Property]]&lt;br /&gt;
*[[SDK Terrain|Terrain]]&lt;br /&gt;
*[[Propdump|Property Format &amp;amp; Code Sniplets]]&lt;br /&gt;
*[[Elevdump|Elevation Format &amp;amp; Code Sniplets]]&lt;br /&gt;
*[[Atdump|World Attributes Format &amp;amp; Code Sniplets]]&lt;br /&gt;
*[[HUD]]&lt;br /&gt;
*[[Toolbars]]&lt;br /&gt;
*[[Movers]]&lt;br /&gt;
*[[SDK Global Mode|Global mode]]&lt;br /&gt;
*[[SDK World Server Administration|World server administration]]&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
*[[Attribute|Attributes]]&lt;br /&gt;
*[[List of SDK Data Structures|Data structures]]&lt;br /&gt;
*[[:Category:SDK Events|Events]]&lt;br /&gt;
*[[:Category:SDK Callbacks|Callbacks]]&lt;br /&gt;
*[[:Category:SDK Methods|Methods]]&lt;br /&gt;
*[[SDK Reason Codes|Reason codes]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wrappers for Geeks ===&lt;br /&gt;
&lt;br /&gt;
A third-party wrapper of the C/C++ SDK for .NET is available here: https://github.com/Bloyteg/AW.SDK.Core.&lt;br /&gt;
&lt;br /&gt;
A SDK wrapper for the [https://www.autoitscript.com/site/ AutoIt scripting language] along with information on how to use it: https://github.com/locodarwin/AWSDK-For-AutoIt&lt;br /&gt;
&lt;br /&gt;
Further third party wrappers for Python, Perl, LUA and Ruby have been available online, yet aren&#039;t linked to this site.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
*[http://www.activeworlds.com/sdk/download.htm SDK Official download page]&lt;br /&gt;
*[http://wiki.activeworlds.com/index.php?title=SDK Official SDK documentation]&lt;br /&gt;
*[https://github.com/Bloyteg/AW.SDK.Core/ ActiveWorlds SDK .NET Wrapper] - Leads to third party site on GitHub&lt;br /&gt;
&lt;br /&gt;
[[Category: SDK]]&lt;/div&gt;</summary>
		<author><name>Xan</name></author>
	</entry>
</feed>