THE ADMIN'S GUIDE TO TERRAFORM
                 Copyright (c) 1995 by Triggur of Brazilian Dreams
                                pferd@netcom.com
 
I. WIZARD SETUP
 
   A wizard needs to do the initial installation.  This is contained in
the script file terraform-install.txt.  Using TinyFugue, you can 
 
/quote -0 'terraform-install.txt
 
...and it will be installed on your MUCK.  This must have been done before
ANY of the following information can be used.  You can find out if TerraForm
has been installed on your MUCK by typing EX $TMOVE  ... if that comes up with
anything other than  "I don't see that here", TerraForm has already been
installed. 
 
   If you want to restrict access to the @INITWORLD command, which initiates
the creation of a whole planet, you should duplicate the exit installed on
#0, moving this command (and any others you want to restrict) from one
of the exits to the other, @LOCKing the restricted one however you like.
 
II.  GENERAL NOTES
 
  As a general rule, avoid changing any of the TerraForm-generated
properties by hand!  The most crucial properties that make the world run
are wizard-only props, but there are still some that the owner of the rooms
can affect.  SCREWING THESE UP COULD FATALLY DAMAGE YOUR PLANET'S INTEGRITY!!!
If you use the @commands provided for working with a TerraFormed world,
everything should be just fine; they try to trap all possible errors.
 
  Setting up a planet and then building on it is much easier than trying to
integrate existing rooms into a TerraFormed planet.
 
  With the old way of building, you would @dig a series of rooms, describe
them, create a bunch of exits, @succosuccodrop those, link the rooms
together, then move on to the next room, ultimately linking them with whatever
existing structure the muck already had.
 
  Using TerraForm, however, is a lot more like people build things in real
life;  you explore the planet and look for what you think is the perfect
place to put your town, city, temple, house, treehouse, cave, etc, and then
start making changes to that location.  Instead of creating doorways like you
used to do, you create walls;  this, too, is more like real life.
 
  Ultimately, I think you'll come to feel that building worlds with TerraForm
is much easier, faster, and more natural than the old way.
 
 
III.  INSTALLING THE EXAMPLE PLANET 'EARTH'
 
  TerraForm comes with an example planet that demonstrates many of its
features.  This is in the file terraform-earth.txt.  To install this on
your MUCK, create a new room (naming it 'Earth' is a good idea), go to
that room, and
 
/quote -0 'terraform-earth.txt
 
...and after paging through several hundred lines of output from the commands
it invokes, you should be able to @TPORT (teleport) to any location on or
around the planet.  @TPORT #LIST will show you a few pre-programmed
destinations that you can use by name, or for example, @TPORT 330 430
will place you in a South American rainforest, @TPORT 500 750 will put you
in the frozen Antarctic, and so on.  Examine the terraform-earth.txt script
file to see what it is invoking to set up the planet.
 
   This simulation of the Earth is 2400 rooms around, 800 rooms from the
North pole to the South pole, has oceans 100 rooms deep, and a sky that is
1000 rooms tall.  In order to dive and fly, you will need to
 
@set me=_dive?:yes
@set me=_flight?:yes
 
   The total # of simulated rooms is somewhere near 2 billion.  See the
command summary below for details on how to link your own building with the
planet.
 
 
IV.  CREATING A NEW PLANET
 
1.  Create a room that is to become the primary map room for your new planet.
Go to that room and run the @INITWORLD command.  That will ask you some
questions about the size of the planet and such, and create exits to manage
it.
 
2.  Draw, in your favorite text editor, the map of the whole planet.  You may
use whatever characters you wish to indicate types of terrain, with the
exception of the '!' character; this universally means that the player cannot
enter that region of the map.  The size you draw maps (ie, the number of rows
and columns in them) is directly related to the amount of detail you want.
The example Earth planet's world map is 84 characters wide and 24 characters
tall.  It is generally a good idea to keep maps small enough that you can
display them all in one screen.
 
3.  Install that map with the @EDITMAP command (see details below).
 
4.  Write up 'description prototypes' (see details below) for each of the
different terrain types (each of the different characters) on your map and
install each terrain with the @EDITTERRAIN command (see details below).  Any
character found on the map that you do _NOT_ set up with @EDITTERRAIN is
treated as 'transparent', or as a hole in your map.  This is important when
it comes to map hierarchies.
 
5.  If you want higher-detail areas, create another map room, setting its
parent as the primary (or the one above it; if you want a map for Colorado,
you might parent it to the map room for North America, which in turn is
parented to the map room for Earth, if you wanted that much complexity).
Once you have another map room set up, goto step 2, drawing the maps for
the different regions.
 
6.  To link in standard buildings and areas with TerraForm, you can use
the @TLINK command (see details below).  NEVER @LINK EXITS TO ANY
ROOM THAT IS CREATED BY TERRAFORM(*)!!!  You must _always_ use the @TLINK
command to do this, since such exits have special properties that make
them work.  It is recommended, however, that all building be done _WITH_
TerraForm for consistency and for future upgrades and abilities.
 
* As a rule, this is true.  The only exception is when the destination room
is _permanently_ @FLUSH NO.  If it is guaranteed to exist, you can safely
use its dbref# when creating exists and such.
 
 
V.  FEATURES AND NOTES ABOUT TERRAFORM
 
- You _can_ use @ACTION and @LINK to create exits _from_ a TerraForm-
generated room to any room that is _not_ a TF room.  For instance the
exit 'go cave' could be made in a TF room and linked to a cave system
that was build by hand.  The preferred course would be to use @tlink
though, since it ensures that there is an exit in the reverse direction,
too.
  
- The owner of a map room is also made the owner of any rooms that are
created from that map, and s/he also owns any exits that are created
with the room.  This persion should, therefore, be set to have no
building quota.
 
- Because of the hierarchy of map rooms that have increasingly detailed
maps the farther you get from the primary map room, and because each of
these map room 'levels' can be owned by someone different, this
naturally leads to the fact that anyone who owns a room in that chain
of maps has access to the @COMMANDS used to manage the rooms.  Thus, if
I owned the North America map and someone else owned the Colorado map,
I would still have access to the admin commands when I'm in the
Colorado map room or any rooms generated by it.  Also, wizards always
have access to these commands.
 
- Security is a big issue with TerraForm; most of the controlling props
are stored in wizard-access-only form, and some are writable only by wizards
but are readable by everyone.  Still others are readable and writeable only
by wizards and the owner.  The reason for this is to keep rogue Muckers
and the general public from digging into the workings of the TerraFormed
world and illicitly learning its secrets.  Also, certain admin-level
commands do different things depending on where you are; they have one
function in a map room, and another in the primary map room (like
@sanity)
 
- At any command prompt asking for information, you can always still speak
and pose;  "hello   will make you say hello to everyone in the room, and
:waves will make you wave to everyone in the room, without leaving the program.
 
- TerraForm automatically saves most of the attributes of any exits that have
been created in a room before it recycles them, and reconstructs them as a
player re-enters the room.
 
- NEVER, EVER, EVER @recycle a TerraForm-generated room by hand!!!!!!!!!
ALWAYS let TerraForm take care of it itself.  Never, no-how, no-way, forget it,
adios, give it up, don't even THINK it.  And if you do, remember:  I TOLD you
so.  [NOTE: In the V1.18 release, this is a bit more relaxed, since it
now checks before entering a room to make sure the database entry is still
valid.  Also, the @SANITY command helps clean this up.  Still, it should NOT
be done.]
 
 
VI.  HOW DESCRIPTION PROTOTYPES WORK
 
  Since it would be _very_ boring to give every room in a given terrain the
same name and description, TerraForm lets you use 'description prototypes'
for them, which gives you a means of 'randomly' varying the descriptions,
and it ensures that every time you visit a room, it always has the _same_
description.  Both the room name and the room description (both set with the
@EDITTERRAIN command) can be written with the names of maproom proplists in
them.  For example, you might have a description that reads,
 
You see %bigsizes% rocks.
 
...and a proplist in that maproom named ./bigsizes .  The ./ is prepended for
security reasons and _is_ necessary when you issue the command:
 
lsedit here=./bigsizes
large
huge
enormous
.end
 
  When TerraForm creates a room with that description, it will see %bigsizes%
and replace that with a random selection from the ./bigsizes proplist.  Each
line in the proplists can have _more_ %proplist% names in it.  With a little
bit of calculation, you can see that even a reasonably simple set of
sentences containing these substitutions will result in a _HUGE_ number of
possible descriptions.
 
  Any name between the % characters that is _not_ a valid proplist name will
be substituted with nothing (removed, along with the %% characters).
 
  TerraForm will look only in the same maproom for these proplists.
 
  You may find that you can save yourself time and energy when you are
creating terrains by always creating proplists for a new maproom that list
common adjectives, adverbs, superlatives, articles, etc, and using these
in many terrains.
 
  For a complete example of how this works, see the example planet file,
terraform-earth.txt .
  
   
VII.  COMMAND REFERENCE
 
PUBLIC COMMANDS:
 
@LOC
 
   This is a public command that tells you your current x,y,z location in
a world.  Admins can, at any level of the map hierarchy, specify the prop
_loc_ok?: yes or no and every room beneath that map room will be set to
either allow or disallow public use of this command unless locally overridden.
The default is yes.  Wizards and admins can use the command
@LOC <PLAYERNAME> to get the current location of any player in the world.  This
command is only really useable from a TerraFormed room or maproom.
 
ADMIN COMMANDS:
 
@INITWORLD
 
   This command should be used only ONCE per planet.  Changing by hand any
of the properties it sets up after a world has already been created may have
disasterous results and could severly damage the whole planet.
 
   It will ask you the # of rooms around the world and the # of rooms from pole
to pole (for a round planet, the second number will be roughly half the first).
It will then ask you how many rooms 'tall' the atmosphere and surrounding space
is.  If you only want to model the terrain of the planet and not the atmosphere,
enter 0 here.  If you chose to have an atmosphere, it will then ask you what
property on the player (if any) is to be checked to allow flight, and it will
automatically create 3 levels of atmosphere/space for you.  This can be changed
later by hand (see details below).
 
  It will then create on the room a set of all the directions you can go on
a TerraFormed planet and set them up for you.
 
@KILLWORLD
 
   This command, when called from the primary map room, will scan through
the database of terraform rooms and destroy ALL known rooms generated for
this particular world.  Any hand-made map rooms will be left intact, however.
 
   This is a VERY powerful command, and should be used only when a world
is no longer wanted, or when you are uploading scripts that create your world
and you just want to make sure that all the rooms and props generated for the
old revision are removed first.  It doesn't touch the description prototype
lists or the terrain info, but it does destroy most of the rest of the props.
 
@SANITY
 
   The @SANITY command will do 3 different things;
     1) Upgrade your TerraForm revision and make changes to your world as
        necessary.
     2) Fix any inconsistencies in the TerraForm database of rooms and
        occupants and such.  This is done only from the primary map room.
     3) Show you the list of characters that are not defined in your map.
        Some of the characters it finds you may NOT want defined (if you
        want holes that pass through to the background maps for instance),
        but usually this is useful for finding errors in your terrains.
        This is done only in a map room.
 
   If things are acting strange, @SANITY _may_ help.  Note that this command
takes a lot of processing time for large worlds, so use it as sparingly as
possible.
  
@SKYLINK
 
   This command lets the controller(s) of the world set up the "map of the
sky" that specifies what areas of the sky lead to what other planets, stars,
or moons (with a full menu-driven interface).  This means that when somebody
in any of the rectangular regions listed as links goes 'up' from the highest
point in the sky, they will be moved into whatever world is associated with
that region.  Furthermore, @skylink uses the same hierarchy of rectangles so
that you can have the whole sky lead to some distant nebula, for example,
with smaller regions scattered about that lead to moons or other planets.
Links higher in the list have higher priority than links lower in the list.
The algorithm used to determine where in the sky you end up in the destination
world is a little complex.  It reverses the X (east-west) axis because you
are looking at the destination planet as a mirror image (they are all imagined
to be spinning on the same vertical axis).  Depending on where you are in the
rectangular region that leads to the planet, you will be dropped off in a
different part of the sky.  In _REALITY_ only half of a planet faces you at
a time, but since planets in TerraForm don't _really_ spin, it can drop you
off anywhere on the destination planet's surface/sky.
 
@EDITMAP
 
   This command is to be used while in a specific map room.  It will put
you in the lseditor where you can enter (or more likely, upload) the
map of the area.  Make sure if you're uploading that you always delete the
lines that are already there so your map doesn't just keep getting taller!
 
   Once you get out of the editor, it will ask you the coordinates (in
terms of the whole planet) of the upper left corner of the map, and the
lower right corner too.  Your map will be automatically 'stretched' to fit
that region.  The highest resolution you can have is 1 character on the map
= 1 room.  The last question it asks (new feature!) is the dbref of a room
where it should look for terrain definitions.  This lets you standardize on
a set of map tokens, and it saves memory when everybody uses the same ones.
  
@EDITTERRAIN <map character>
 
   This command is used to set up and edit the different attributes for each
of the characters found in a map (for the same maproom only).  It will first
ask you for a name prototype, then for a description prototype.  Both are
a single (possibly long) line of text.  Then it will ask you for the verbs
that will be used for when players move within that terrain.  For instance
for water, the verb might be 'swim' and 'swims' (first person and second
person respectively), while for mountains the verbs might be 'climb' and
'climbs'.
 
   Next it asks you for the depth, in rooms, of this terrain.  Usually the
answer will be 0, meaning that the ground is hard and pretty much impenetrable.
For water bodies and such, this is how you denote the depth of the water.  If
you answered something other than 0 for this, you will next be prompted to 
enter the name and description for rooms _under_ this terrain type (ie,
underwater), the verbs, and then the name of a prop to check on the player
to allow them to move below the terrain (_dive?, for instance).
 
   Any characters in the room's map that are not set up with @EDITTERRAIN
will be considered to be transparent, and the map _beneath_ this one will
next be checked to see what the player's terrain is.  If no terrain is found,
an error is generated (this is bad :).
 
   The '!' character cannot be overridden, and always denotes a part of the
map that the player _cannot_ go.
 
   Map terrain characters can be either upper or lower case-- it doesn't
matter.
 
@ADMIN
@ADMIN <player>
@ADMIN !<player>
 
   This command lets the owner of a world or maproom give the name of a player
that is to be either added to the list or taken from the list of
co-administrators of that region.  Someone listed as an admin in the primary
map room will be able to manipulate the whole planet just like the owner of
the map room.  Someone listed as an admin only in a specific map room will have
control only over that region.  The @ADMIN command with no parameters lists
the names of everyone defined as an admin for that area (it does not go up
the map room path to list admins at higher levels).  As noted of map room
owners before, admins have the potential to own MANY rooms, and should
therefore have a very high quota (or no quota at all).
 
@OWN
 
   This command, used in a TerraForm-generated room by anyone that can control
that region (admins included), will change ownership of the room to that
person so that they can edit it.  Used with @ADMIN, this is how multiple
builders can work on a single area.
 
@TPORT <x> <y> [z]
@TPORT <placename>
@TPORT #ADD <placename>
@TPORT #LIST
 
   This command lets wizzes and admins move around in the TerraFormed world
without having to manually move, room by room.  You can supply X and Y (and
optionally Z) coordinates to move to, or the name of a named location.
@TPORT #LIST lists all valid named locations, and @TPORT #ADD <placename>
lets you add a named location.  Note that because planets can be linked
together now, if you specify (accidentally or otherwise) too large of a Z
value at a location that leads to a planet, you will find yourself either
in another planet's air space or on the surface of that planet.  Plenty
surprising if you didnt expect that. :)
   
@TLINK
 
   This command needs to be invoked when standing in a TerraForm-generated
room.  The first thing it asks for is the dbref# of the destination room to
link to.  Then it asks for the name of the exit from THIS room to THAT room,
then for the name of the exit from THAT room to THIS room.  It correctly
handles both TerraFormed destinations and standard ones.
 
   Unlike the normal @ACTION/@LINK approach, this one command does everything
for you.  You can @succ/@odrop/etc the exits yourself later.  As a note, any
exit that goes INTO a TerraFormed room doesn't use the standard
succ/osucc/odrop; instead it uses props named the same way.  For instance,
@set exitname=osucc:has joined you.    There _is_ a good reason for this :).
 
@INSIDE YES
@INSIDE NO
@INSIDE
 
   This command marks the given room as both 'inside:yes' and 'flush:no'.  It
makes it a special case, not subject to limitations in the vertical direction.
That means that if you are currently on the surface of a solid terrain (can't
go under it) and you can't fly, @INSIDE YES will suddenly allow you to move
both up and down from that room.  Going down would NORMALLY put you in solid
rock, so if you don't want the player to move that direction, @BLOCK it.  If
you do want them to, you can now go down and @FLUSH NO and @DESC that room as
you like.  Note that for underground rooms and rooms "in the air", if you want
to keep building in a given direction, that room, too, will have to be marked
'inside:yes'.  When no parameters are given, it will tell you the current
status of the room.
  
@BLOCK <list of directions>
 
   This command helps you erect walls (and floors and ceilings) in your
buildings.  Used by itself with no directions, @BLOCK will list the directions
in which players are currently not allowed to go.  If you build a wall that
prevents players from going north in a given room, it will therefore, also,
be impossible for players to move _south_ from the room that lies to the
north.  The list of directions given should all be in the same abbreviation
format that the ordinal directions always use in TerraForm: n,s,e,w,se,sw,ne,
nw,u,d, and should be separated by semicolons.  You can use other names
too, though, but only those mean anything to TerraForm.  Giving a direction
name with an exclamation mark before it means _UNBLOCK_ that direction.
Example:  @block s,e,!n,d   blocks south, east, down, and unblocks north.
 
@FLUSH YES
@FLUSH NO
@FLUSH CLEAR
@FLUSH
 
   This command, when used in a TerraForm-generated room, specifies whether
or not it will be recycled when everybody has left.  If 'YES', the room will
be recycled.  If 'NO', it and all changes to it will be preserved.  If
'CLEAR', the room will be set flushable, _and_ all @TLINK exits out of it that
lead to other TerraFormed rooms will be destroyed.  When no parameters are
given, it will tell you the current status of the room.
 
 
VIII.  SOME ERROR MESSAGES AND WHAT THEY MEAN
 
ERROR: COULD NOT CALCULATE TERRAIN TYPE
   Means that you don't have adequate map coverage for a coordinate
that the player was trying to move to.
 
ERROR: COULD NOT CREATE EXIT
   Means that the exit creation failed.  This probably means something
serious is happening to the server at the moment.
 
ERROR: COULD NOT CREATE ROOM
   Means that the room creation failed.  This probably means something
serious is happening to the server at the moment.
 
ERROR: EXIT #xxxx DOES NOT HAVE 'ENV' PROP SET TO ENV ROOM
   Means that the player tried to use a TerraForm exit that was mal-formed.
 
PERMISSION DENIED
   For one of any number of reasons, the player isn't allowed to do what
they were trying to do.  This is usually associated with an admin command.
 
 
IX.  REALLY ADVANCED STUFF
 
- If you are not happy with the 3 levels of sky that are automatically set
up by @INITWORLD, you can hand edit the primary map room's ./sky* props
accordingly.  The skyname and skydesc variables follow the same description
prototype standards the rest of the terrain types follow.
 
- I'm not yet sure what use the planet-wide _listen parameter is good for.
Maybe someone can find a good reason :)
 
- It is possible to link a planetary simulation with other such simulations
by hand-editting the primary maproom's ./spacemap proplist, setting the
regions of space that map to which other simulations' primary env rooms
when the player reaches the current planet's 'highest point in space'.
This is done with the @skylink command.
 
- Special exits can be hand-made which skip the player an arbitrary number
of rooms in a given direction.  This is like 'running' or possibly even
like having a fast vehicle.
 
- It is possible to @TLINK pairs of exits not only between different parts
of the same planet, but also between different planets.
 
- There is no reason to assume that the terraformed world is the SURFACE
of a planet... it might also be thought of as the INSIDE of a Dyson
sphere. :)
 
- There has been some confusion with how the n/s/e/w edges of the planet
work.  East-West is simple; it just wraps around.  North-South is more
complex;  If the world is 1000 rooms around, and you are currently at room
100,1 (next to the north pole), 'n' will take you to 600,1, which is to say
that you are now on the other side of the pole, and have crossed over to the
other side of the world, exactly as you would do if you REALLY stepped across
the north pole.  'n' again will take you BACK to 100,1.  (TerraForm won't
actually let you be AT a pole).  It has been the source of some
complaint that you can't just keep going around the globe by going north,
but then you can't do it in real life, so why here? :)  If you want to
do that you'll have to go north until you pass the north pole, then start
heading south until you cross the south pole, then start moving north again.
 
END OF DOCS