Movement

Movement types Relative, absolute, etc..
Location tag What location tag contains
Containers and relative movement You are on ship that moves at sea

Movement types

Movement type Server Client tags
a) Relative coordinates Nethack and many MUDs Simple client vector, relrotation
b) Force vector QUADAS, Cyphesis in future Normal client forcevector, torquerotation
c) Force vector/limb Some future world with VR VR client with suit forcevector, torquerotation
d) Absolute coordinates Cyphesis currently Map editor coords, rotation

If you have better suggestions for tag names, mail to scripting@.

Server should always support less accurate movement:

Advanced server:a,b,c
Less advanced server:a,b
Simple server:a

Same for client. Client tries most advanced method of moving and if it gets illegal event back then it falls back to less advanced method.

Server implementation could be something like this: server:b, client:a Create appropriate force vector for requested move difference and use it as if that was requested.

When 'force' -tag is used by client, then likely server sends movement sights using 'vector' -tag.

Why?

It would be nice if server would work with less advanced clients and vice versa. We can't immediately implement some very detailed moving. It's just that when client uses less accurate 'movement type' then (s)he cannot control her/his character as accurately. For some programs it doesn't make even sense to do it initially (like some existing program).

Location tag

This is current/new location for entity. It contains id, position and optionally orientation.

Id: Entity that acts as reference for location.

Either coords, vector or forcevector is used for position. Units are in meters unless something different has been decided between server and client.

Coords: absolute coordinates in relation to reference entity. Example (x,y,z):

       <coords>12.4,23.2,-0.5</coords>
    

Vector: relative to receiving character. Example:

       <vector>12.4,23.2,-0.5</vector>
    

Forcevector: Force relative to receiving character. Default unit is newton. Example:

       <forcevector>12.4,23.2,-0.5</forcevector>
    

Either rotation, relrotation or torquerotation is used for rotation. Units are in radians unless something different has been decided between server and client.

Rotation: Absolute rotation in relation to reference entity. Example (x,y,z -axis):

       <rotation>0.1,-0.2,2.0</rotation>
    

Relrotation: Relative rotation in relation to receiving character. Example:

       <relrotation>0.1,-0.2,2.0</relrotation>
    

Forcerotation: Relative torque in relation to receiving character. Default unit is newton meter. Example:

       <torquerotation>0.1,-0.2,2.0</torquerotation>
    

Containers and relative movement

You are on ship that moves at sea.

You move: ship has moved in relation to you:

       <ent>
         <id>you_123</id>
         <loc><id>ship_12</id><vector>-4.5,2,0</vector></loc>
       </ent>
    

Ship moves: sea has moved in relation to ship:

       <ent>
         <id>ship_12</id>
         <loc><id>sea_1</id><vector>0.1,5,0</vector></loc>
       </ent>
    

Sea moves: you don't notice.

Somebody else moves on same ship: somebody has moved in relation to you:

       <ent>
         <id>somebody_else_1234</id>
         <loc><id>ship_12</id><vector>-0.5,2,0</vector></loc>
       </ent>
    

Another ship moves: ship2 has moved in relation to your ship:

       <ent>
         <id>ship2_33</id>
         <loc><id>sea_1</id><vector>-3.1,1.2,0</vector></loc>
       </ent>
    

Aloril
Last modified: Mon Jun 7 19:56:50 EEST 1999