[MUD-Dev] SMOG - small multiuser online game
crosbie at cyberspaceengineers.org
Thu Jan 29 10:59:58 New Zealand Daylight Time 2004
From: Frank Crowell
> SMOG will get its kick start by using an existing 3D game engine
> and it-doesn't-suck-that-much network technology. The intent is to
> build as little as possible - not as easy as I think it is.
I've been thinking along similar lines.
It may even be possible to do zero coding.
The ingredients I'm looking at:
1) P2P transport - Gnutella, FreeNet, etc.
2) 3D front end - Quake, Unreal, or other moddable game with
3) Scenery communicated via files
4) Filename encodes spatial relationship
5) Content - existing maps, automatic maps, maps generated by
This provides the ability to create a fairly colossal virtual world
(albeit static), with up to 16 players per file (sharded as
Think of it as a better way of cataloguing all the maps for
Quake/Unreal. Instead of umpteen websites with lists of maps, we
can now start arranging maps as if they represented a contiguous
topography of a virtual world.
What would happen next is that someone will figure out how to create
the game that spans all the maps (such that actions in one map have
ramifications in others).
I've made some back of the envelope doodlings about a possible
filename encoding scheme, if only in the hope that other people will
(Also posted elsewhere)
A file is presumed to contain static geometry in a local co-ordinate
The filename contains no co-ordinates, but by specifying
dependencies impies a relative transform that is used to determine
the co-ordinate space of the file.
The entire collection of files represents a 3D universe. Only a
small subset is required for viewing a portion of the universe at
any one time.
A file both represents a region of the universe, and a means of
determining what files are necessary to view it. A file is also a
URL of sorts.
<SOT> = Start of text
<Alpha> = UTF-8 alpha also permitted.
<Numeric> = UTF-8 numerics also permitted.
<Name> = Any alphanumeric identifier of at least 1 char not starting
with 'ZZ'. Not case sensitive, but case preserving.
<ws> = White space (may be mapped to single underscore)
<OPS>::= <octal digit><octal digit><octal digit>
The meaning of files
Each filename describes a scenery file containing geometry in local
coordinate space, with additional texturing and other supplemental
information as necessary. This may be anything from a simple, single
object, to a complex city.
Files are uniquely identified by their Name and filetype. However,
files of the same name are supposed to describe precisely the same
scenery irrespective of their filetype. All other components of the
file name are supplementary. NB A 'Name' is a universally unique
A file has the following properties:
It has an author
It has a creation/modification date
It has a bounding sphere (precomputed or not) (centre and
It may have dependencies
It is positioned, oriented, and scaled with respect to up to
three of its dependencies (if any)
The meaning of OPS
Three octal digits whose binary representation indicates whether or
not the nth dependency is involved in determining the orientation,
position and/or scale of the scenery.
Coordinate system: Right-hand-rule: X right, Y away, Z up.
Thus, an octal digit X:
if 0: indicates that no dependencies are involved (world space)
if 1,3,5, or 7: indicates the first dependency is involved
if 2,3,6, or 7: indicates the second dependency is involved
if 4,5,6, or 7: indicates the third dependency is involved.
O, the first digit (orientation):
0 dependencies = World co-ordinate frame
1 dependency = Same co-ordinate frame
2 dependencies = Align X axis with bounding sphere centres (or
same as first if concentric)
Align Z with average of dependency Zs
3 dependencies = Align X axis with 1st BS centre to bisect 2nd &
If not colinear align Z to normal of plane formed by BS centres,
else align Z with average dependency Z.
NB Orientation calculations to utilise quaternion representation
and spherical linear interpolation.
P, the second digit (position):
0 dependencies = Origin is world origin
>0 dependencies = origin is average of positions of dependency BSs.
S, the third digit (scale):
0 dependencies = Same scale as world
>0 dependencies = scale is 1 unit = Average dependency BS diameter
The absence of OPS is equivalent as follows:
to ZZ000 if no dependencies are provided
to ZZ111 if one dependency is provided
to ZZ333 if two dependencies are provided
to ZZ777 if at least three dependencies are provided.
The meaning of dependencies
A dependency gives the name of another file that is required for
some reason. It is likely that a file cannot be properly
rendered/modelled until its dependencies have been localised.
A file with no dependencies is presumed to be a anchor object. A
viewer is only expected to consider one anchor based dependency
graph at any one time. Anchor graphs may therefore disregard
collisions with other anchor graphs. It is possible that some
anchors may have implicit positions, e.g. mapped to planets in the
Circular dependency relationships, especially those that produce
non-static co-ordinate spaces can be detected and handled
1) To search for a file of a particular name Search for the pattern:
<SOT><Name>_*.* (In other words, file must start with "Name_")
2) To search for files that are dependent on a particular file
Search for the pattern *_<Name>_*.* (In other words, file must
contain "_Name_", but not start with it)
If it is not possible to specify that a match pattern must commence
a filename, then a prefix will have to be adopted, e.g. XX vis
A file guarantees that its bounding sphere will not exceed the total
BS of its first three dependencies (centred at any one of
them). It's geometry may be legally clipped in order to meet this
The preferred version of a particular file is the most recent file
of that Name, that has a type compatible with the viewer's software,
and that meets the viewer's selection criteria (most popular, by
particular author, as used by friends, etc.). Other information may
be encoded within the author descriptor to assure accuracy of the
MUD-Dev mailing list
MUD-Dev at kanga.nu
More information about the MUD-Dev