Continents Mud

Area Writers Guide

Continents Release 1.0

Some of this document is still in original form but many changes to
bring it up to date with Continents code have been put in.

                                   - Rudder
EnvyMud Release 2.0
Monday, 25th December 1995

=== Preface

The majority of this document was submitted to the merc mailing list by RoX of
Farside, and we are greatly indebted to the Farside staff for this excellent
introduction to area building.  We have modified the text slightly to
match the changes made at EnvyMud (especially the removal of slot numbers),
removed references to Farside immortals (You may still ask them them what to
do! :) ), and have added our own examples, but have otherwise left the
original document intact.
					- Thelonius

=== Acknowledgement (from Silence of Farside)

This document contains information from 'database.doc', 'dbsup.doc', and
'values.doc', part of the original Diku mud release and copyrighted by the
Diku folks.  See their 'license.doc'.

I have made this file from building.txt and the other area building files
included in the Merc22 package then expanded and edited them to make it
easier for first area writers.  All thanks go out to the creators of mud.

Some starting hints

Plan out your area on paper before writing it out.  Check the mud to see if
that area is already in place or something similar.  Map out your area, then
place the mobs and items BEFORE you start writing the area.  Think before you
write.  Read through this document, and try and figure it out.  If you still
need help, don't hesitate to ask someone online.  Try to have as close to, but
less than, sets of 100 rooms as you can, since we use 100 roomed slots.  Let
your imagination run wild and remember to place exits in the long description,
including doors.  While writing your area, have a previously written and
debugged area nearby so you can use it as a reference.

=== Overview of Areas:

An area is one piece of the world.  Each area is defined in a separate file.
All of our area files have the extension '.are'.  Areas are what make the
game special, sure the gods help, but it is the areas.  Please keep your
areas original and not too far out.  Use good and proper English and try and
spell check your area before sending it in.  Tina and the high up gods will
debug if necessary.  Remember the world is a magical one, where technology
was not really developed.  So please keep the machine guns, grenades, lasers,
etc out.

EnvyMud has changed the format of the value# fields of the objects in the
area files.  Mainly the removal of slot number references in potions, wands,
staves, etc.  But, since each area file is a separate file, it is still easy
to port areas from one diku mud to another through a simple conversion.

EnvyMud 2.0 has added race definitions for mobiles taking the place of the
former repop position.  IE) sleeping or etc.  See the #MOBILES section below
for a more indepth description.

If you write new areas, and would like to contribute them to Continents Mud,
just e-mail to one of the addresses at the end.  As you can see from typing
'areas' in the game, we credit the original authors whenever we can find them.

Although the format of EnvyMud areas is (somewhat) compatible with other Diku
and MERC muds, EnvyMud ignores many of the fields in the area files,
generating its own values based on mobile and object levels.  We adopted this
policy in order to maintain balance between areas originally written by many
different authors.

=== Sections of an Area

An area file contains the following sections:

    #AREA
    #HELPS
    #RECALL
    #MOBILES
    #OBJECTS
    #ROOMS
    #RESETS
    #SHOPS
    #SPECIALS
    #GAMES
    #MOBPROGS
    #SOCIALS
    #$

An area is a collection of sections starting with #AREA until the next #AREA.
All of our area files (except 'help.are') contain just one #AREA section,
which is at the top of the file.

=== Data Types (the following was taken straight out of builders.txt)

All of the data in an area file (even the section headers) consists of a
series of values.  Each value has a specific type.  The server parses the
file by reading in data values one at a time according to the types it
expects.

Blank characters (spaces, tabs, new lines, carriage returns) at the beginning
of a data value are always ignored (this includes strings).  Thus, you can
format the area files whatever way suits your taste and your needs.

The individual types are: 'letter', 'word', 'string', 'number', and 'to_eol'.

A 'letter' is a single non-blank character.

A 'word' is a sequence of non-blank characters terminated by a blank.

A 'string' is a sequence of non-tilde characters terminated by a tilde.  A
tilde is this character: '~'.  Thus, strings may contain blanks, and may be
multiple lines long.  There is no limit on the length of an individual
string; however, all strings go into a common memory pool whose size is fixed
when the server is compiled.

A 'number' is a decimal number with an optional leading '-' or '+'.  The '|'
character may be used in any number: '1|64|1048576' has the value 1048641.
The individual values separated by '|' are added together, so '5|6' is 11,
not 7. The components need not be powers of 2.  This feature is extremely
useful for defining bit vectors, such as the ACT_* and AFF_* bits for
mobiles, but is not restricted to bit vectors: any number may use the '|'
construction. ie, when putting affects together, all you need to do is the
following (example is a mob who is aggressive and stays in one room) 1|2|32.

A 'to_eol' is all the characters from the current position to the end of the
current input line.  It is used for parsing comments at the ends of lines.

In the syntax description below, &ltvalue:type&gt indicates a value to be read of
the indicated type.  A backslash '\' indicates that the file format itself
has only one line, but several lines are used in this description to fit
within 80 columns.

Braces '{ ... }' are used to enclose elements.  They are NOT literal parts of
the file format, but a way of indicating that the enclosed elements may be
repeated zero or more times.  Braces at the same level of indentation
indicate that the parallel elements may be present in any order.

All other characters in the syntax description are literal characters.

Mobiles, objects, and rooms are identified by vnum (virtual number).  The
range of vnum's is 1 to 65534.  Vnum's must be unique (for that particular
kind of vnum).  Vnums do not have to be in increasing order.

Typically an area uses the same range of vnum's for mobile vnum's, object
vnum's, and room vnum's, starting with a multiple of 100.  This facilitates
adding the area into an existing set of areas.

At EnvyMud, we do not preassign room vnum's.  Instead, all of your vnums
should be of the form XX01, or **01, or any other easily replaced string.
They will be changed when we incorporate your area into the mud.

=== The #AREA section (from this point onwards, I have changed things around)

The syntax of this section is:

    #AREA &ltarea-name:string&gt

The 'area-name' can be any string.  The 'areas' command provides a list of
areas, so it's worth while to follow the standard Envy format for this
string:

#AREA	{ 5 35} Author    Name for New Area~

e.g.
#AREA	{ 5 10} Copper    In the Air~
#AREA	{ All } Builder_5 Werith's Wayhouse~
#AREA	{ 1  7} Amanda    Fun Factory of Doom~
#AREA	{45 up} Scourge   Cloudy Mountain~

The first two numbers are recommended level range for the area.  The Author is
the name of the original author of the area.  The last phrase is the name of
the area. Please line up the various parts of this line as shown above in
the examples.

Do not put comments into the AREA section.

=== The #HELPS section

This section is usually omitted from area files but may be included to
better enhance your area.  For instance, your zone containing many
dwarves might have a HELP DWARF section.  This individual help gets tacked
onto the pool of all helps.  Conflicting helps are resolved by EnvyMud by
displaying all instances of the help.

Generally, all helps are placed in one file, help.are, that contains no
other sections.  The syntax of a help entry is as follows:

    #HELPS
    {
	&ltlevel:number&gt &ltkeywords:string&gt~
	&lthelp-text:string&gt~
    }
    {
	&ltlevel:number&gt &ltkeywords:string&gt~
	&lthelp-text:string&gt~
    }
    0 $~

The 'level' number is the minimum level necessary to read the help for the
given topic.  For example:

50 IMMTALK :~

would mean that only players of level 50 or higher could read the helps
for the 'immtalk' command.

The 'keywords' are the text strings that must be matched in order to see
this particular help entry.  Case is unimportant, though typically the
keywords are capitalized.  For two-word entries, single quotes must be
placed around each phrase.  For example:

0 'CURE POISON'~

The 'help-text' of the help is completely at the discretion of the builder.
Spells usually give a syntax example, followed by a summary:


0 'CURE POISON'~
Syntax: cast 'cure poison' &ltvictim&gt


This spell will remove the effects of poison from the victim's body.
~

Normally when a player uses 'help', both the keywords and the help-text are
shown.  If the 'level' is negative, however, the keywords are suppressed.  This
allows the help file mechanism to be used for certain other commands, such as
the initial 'greetings' text.

If a 'help-text' begins with a leading '.', the leading '.' is stripped off.
This provides for an escape mechanism from the usual leading-blank stripping of
strings, so that picturesque greeting screens may be used.

0 $~:  This goes to the end of the entire #HELPS section to notify the
area loader that the #HELPS section is over.

Do not put comments into the HELPS section.

=== The #RECALL section

The syntax of this section is:

    #RECALL &ltrecall-point:number&gt

The 'recall-point' gives the vnum of the room to which a player will
recall if they attempt to do so anywhere within the area defined in the
current file.  If this section is omitted, the recall point will be the
TEMPLE where the healer is in Midgaard.  If the 'recall-point' is
invalid, the player is unable to recall when attempted in the zone.
This function was added by Kahn to allow for builder-settable recall
points.

Do not put comments into the RECALL section.

=== The #MOBILES section

These are the mobs in your neighborhood, in your neighborhood.. oh sorry
just passed through Lenny's area.  Anyway, it is here that a lot of the
character of your area comes out.  This is the most important section to
those players who walk around with brief on.
The syntax of this section is:

    #MOBILES
    {
     #&ltvnum:number&gt
     &ltkeywords:string&gt
     &ltshort-description:string&gt
     &ltlong-description:string&gt
     &ltdescription:string&gt
     &ltact-flags:number&gt &ltaffected-flags:number&gt &ltalignment:number&gt {P}S
     &ltlevel:number&gt &lthitroll:number&gt &ltarmor:number&gt			\
     &lthitnodice:number&gt d &lthitsizedice:number&gt + &lthitplus:number&gt	\
     &ltdamnodice:number&gt d &ltdamsizedice:number&gt + &ltdamroll:number&gt
     &ltgold:number&gt &ltexp:number&gt
     &ltposition:number&gt &ltrace name:string&gt &ltsex:number&gt
    }
    #0

The 'vnum' is the virtual number of the mobile.

The 'keywords' are words which can be used in commands to identify the
mobile. Such as "The captain of the guard" could have keywords of
'captain guard' and you could then "look captain" or "look guard" to see
him.

The 'short-description' is the description used by the 'act' function and
other functions to identify the mobile.

e.g. If you were fighting a giant squid and you see:
   "Your smash kills a giant squid."
'a giant squid' is the short-description. Do not capitalize the first letter.

The 'long-description' is the description used when a character walks in the
room and the mobile is visible.

e.g. You enter a room and see:
  "A giant squid squirts across the room."
That whole sentence is the long-description.

The 'description' is the longest description.  It is used when a character
explicitly looks at the mobile.

The 'act-flags' define how the mobile acts
ACT_ flags:
  IS_NPC           1         Auto set for mobs
  SENTINEL         2         Stays in one room
  SCAVENGER        4         Picks up objects
  BANKER           8         A teller (must be in the bank to do transactions)
  AGGRESSIVE      32         Attacks PC's
  STAY_AREA       64         Won't leave area
  WIMPY          128         Flees when hurt
  TRAIN          512         Can train PC's
  PRACTICE      1024         Can practice PC's
  GAMBLE        2048         Runs a gambling game
  NO_SUMMON     8192         Mob can't be summoned
  NO_HUNT      16384         Mob can't be found with hunt

The 'affected-flags' define more attributes of the mobile.
AFF_ flags:
  BLIND               1
  INVISIBLE           2
  DETECT_ALIGN        4
  DETECT_INVIS        8
  DETECT_MAGIC       16
  DETECT_HIDDEN      32
  HELD               64       (in a snare)
  SANCTUARY         128
  FAERIE_FIRE       256
  INFRARED          512
  CURSE            1024
  POISON           4096
  PROTECT          8192
  SNEAK           32768
  HIDE            65536
  SLEEP          131072
  FLYING         524288
  PASS_DOOR     1048576
  WATERWALK     2097152
  MUTE          8388608
  GILLS        16777216
  FLAMING     134217728
  CAMOUFLAGE  268435456
  PLAGUE     2147483648

The 'alignment' of the mobile ranges from -1000 to +1000.  Keep in mind that
certain spells ('protection' and 'dispel evil') give characters fighting evil
monsters an advantage, and that experience earned is influenced by alignment.

The literal letter 'S' must be present after the alignment.  In the original
Diku mob format, 'S' stands for simple.  Envy supports only simple mobs, so
the 'S' is redundant.  It is retained not only for compatibility with the
Diku format, but also because it helps the server report errors more
accurately.

If this 'S' is preceded with the letter 'P' it tells the code that this
mob is programmed (has a mobscript).

The 'level' is a number from 1 to 80 or whatever level you choose for your
mobs.

The 'hitroll', 'armor', 'hitnodice', 'hitsizeddice', 'hitplus', 'damnnodice',
'damsizedice', 'damroll', 'gold', 'exp', and 'position' fields are
present for compatibility with original Diku mud, but their values are ignored.
Envy generates these values internally based on the level of the mobile.

Race name consists of one of these many races in Continents Mud.  This
list may change when races are added to or deleted from the mud.

    Human, Elf, Halfelf, Drow, Dwarf, Halfdwarf, Hobbit, Bird, Aarakocra,
    Giant, Ogre, Halfogre, Orc, Kobold, Minotaur, Troll, Hobgoblin, Insect,
    Dragon, Animal, God, Demon, Undead, Harpy, Bear, Githyanki, Elemental,
    Bat, Plant, Rat, Vampire, Werewolf, Goblin, Faerie, Arachnid, Mindflayer,
    Object, Mist, Snake, Worm, Fish, Hydra, Lizard, Gnome, Halfkobold and
    Merfolk.

Sex:
  NEUTRAL           0
  MALE              1
  FEMALE            2

Comments may be put into the MOBILES section between mobs using * as a
comment identifier, do not put comments inside a mob.

As an example, I will use a couple of guard mobs, one that guards the city
gates and another that is in the mayor's office in Midgaard.

#3037
cityguard guard~
the cityguard~
A cityguard&X is here, guarding the gate.
~
A big, strong, helpful, trustworthy guard.
~
1|2|64 0 1000 S
22 5 -2 15d15+150 1d4+10
500 0
8 dwarf~ 1
*
* Comments may go here between mobs
*
#3038
cityguard guard~
the cityguard~
A cityguard&X is here, guarding the mayor.
~
A big, strong, helpful, trustworthy guard.
~
1|2|64 2|65536 1000 S
30 0 -7 20d20+200 1d4+15
500 0
8 human~ 1

=== The #OBJECTS section

These are the items that the people who journey through you area will keep
and use, it is best to think up good descriptions for them.  Remember to
balance these items with those that already exist.
The syntax of this section is:

    #OBJECTS
    {
     #&ltvnum:number&gt
     &ltkeywords:string&gt~
     &ltshort-description:string&gt~
     &ltlong-description:string&gt~
     &ltaction-description:string&gt~
     &ltitem-type:number&gt &ltextra-flags:number&gt &ltwear-flags:number&gt
     &ltvalue-0:string&gt~ &ltvalue-1:string&gt~ &ltvalue-2:string&gt~ &ltvalue-3:string&gt~
     &ltweight:number&gt &ltcost:number&gt &ltcost-per-day:number&gt
     {
         E
         &ltkeyword:string&gt
         &ltdescription:string&gt
     }
     {
         A
         &ltapply-type:number&gt &ltapply-value:number&gt
     }
    }
    #0


The 'vnum' is the virtual number of the object.

The 'keywords' are words which can be used in commands to identify the
object.

The 'short-description' is the description used by the 'act' function and
other functions to identify the object.  The first character of the short-
description should be lower case, because this description is used in the
middle of sentences.

The 'long-description' is the description seen when a character walks in the
room and the object is visible.

The 'action-description' is not used, which why you just put a ~ there.

The 'item-type' is the type of the item.

ITEM_ types:
  LIGHT         1
  SCROLL        2
  WAND          3
  STAFF         4
  WEAPON        5
  TREASURE      8
  ARMOR         9
  POTION       10
  FURNITURE    12
  TRASH        13
  CONTAINER    15
  DRINK_CON    17
  KEY          18
  FOOD         19
  MONEY        20
  BOAT         22
  CORPSE_NPC   23
  CORPSE_PC    24
  FOUNTAIN     25
  PILL         26
The following are special item types and are only included here for reference
(only the ingredient type [exception to the rule] may be included in an area
file and only under unique circumstances -- check with the imms first) the
others are created through trade skills.
  TOOL         27
  PART         28
  INGREDIENT   29
  MAP          30

  tool: An object (e.g. hammer) needed to perform a trade skill (like
    build chest).

  part: An object (e.g. metal) that will be incorporated into a
     final product (the hammer).

  ingredient: An object (e.g. ore), found on the mud in raw state,
     used to make parts (the metal)  or as a component of a final
     product (like "a carrot" used in soup).

  Usage example: When a smith forges a hammer(tool), for the builder
     to use in building a chest, the smith uses metal(part) that he
     gets from a supplier who makes metal from the ore(ingredient)
     that the supplier has found on a cloud, plucked from a tree
     limb or wherever it is that ore lurks.

  map: An object created by the traveler using the proper tools,
     ingredients and the "make map" skill.

The 'extra-flags' describe more attributes of the object.

Extra ITEM_ flags:
  GLOW         		   1
  HUM          		   2
  DARK         		   4    This flag means that these items will not show
                                   up with "locate object". They are "hidden".
  LOCK         		   8
  EVIL         		  16
  INVIS        		  32
  MAGIC        		  64
  NODROP       		 128
  BLESS        		 256
  ANTI_GOOD    		 512
  ANTI_EVIL    		1024
  ANTI_NEUTRAL 		2048
  NOREMOVE     		4096
  INVENTORY    		8192    these are items that shop mobs will have to
                                   sell (they never run out of these) -- other
                                   items can also be marked with this
                                   flag if you wish them to disappear when the
                                   mob is killed rather than them going into
                                   the corpse
  POISONED    	       16384    This only applies to weapons (set value3 to make the item poisonous)
  VAMPIRE_BANE         32768
  HOLY                 65536
  METAL               262144
  QUEST               524288
  NOTOAST            1048576    makes objects non-toastable
  NOALL              2097152    must know keyword -- cannot be picked up or worn using all



The 'wear-flags' describe whether the item can be picked up, and if so,
where it can be worn.

WEAR flags:
This tells the location where it can be worn.
  Take                 1
  Finger               2
  Neck                 4
  Body                 8
  Head                16
  Legs                32
  Feet                64
  Hands              128
  Arms               256
  Shield             512
  About body        1024
  Waist             2048
  Wrist             4096
  Wield             8192
  Hold             16384
  Two Hands        32768 not implemented at this time
  With Pride       65536
  Face            131072
  Supply	  262144 on the portable workbench
  On back         524288

The interpretation of the four 'values' depends upon the type of the object.
These values are entered as strings and MUST be terminated by a tilde (~), but
will be changed to integers depending on the type of the object and the form
of the input.  Interpretations are given below.

The 'weight' of the object is just that.

'Cost' and 'cost-per-day' are ignored.  'Cost' is generated internally based
on the level of the object.  Because Envy has no rent, 'cost-per-day' is
completely ignored.

The optional 'E' sections and 'A' sections come after the main data.  An 'E'
section ('extra description') contains a keyword-list and a string associated
with those keywords.  This description string is used when a character looks
at a word on the keyword list, ie) a gem on a sceptre would be:

E
gem~
A small glowing red gem pulsates silently on the tip of the sceptre.
~

This allows for an added dimension in your objects.  I suggest you put extra
descriptions on your important objects that have items of note on them.
It might even be desirable to link your extra descriptions to give just so
much information at a time, leading each extra description to each other.

An 'A' section ('apply') contains an apply-type and an apply-value.  When a
character uses this object as equipment (holds, wields, or wears it), then
the value of 'apply-value' is added to the character attribute identified by
'apply-type'.


APPLY_ types:
  NONE           0
  STR            1
  DEX            2
  INT            3
  WIS            4
  CON            5
  MANA          12
  HIT           13
  MOVE          14
  AC            17
  HITROLL       18
  DAMROLL       19
  SAVING_SPELL  24
  STAM		26

An object may have an unlimited number of 'E' and 'A' sections.


--- Meaning of Value Numbers by Item Type

As mentioned above, the 'value' fields are entered by the builder as TEXT
strings even though they will be converted to and stored as integer values.
EnvyMud made this modification so that spell names, rather than slot numbers,
could be used for scrolls, staves, wands, potions, and pills.  For these types
of items, the text string containing the spell name (for example, cure
critical) is translated to an internal skill/spell number or 'sn'.  For the
other item types, the strings are converted directly to integer values.  If a
potion, scroll, or pill only has one spell, the other strings must still be
terminated by a '~' but need not have any content.  A complete list of spells
is given at the end of this file.

NOTE:  Because these are read in as strings, the '|' format cannot be used for
the flags; i.e. 1|4|8~ is an invalid entry, but 13~ is valid. (reference
ITEM_CONTAINER, value[1])

01 ITEM_LIGHT
   value[0]    unused
   value[1]    unused
   value[2]    hours of light available, 0 is dead
   value[3]    unused

02 ITEM_SCROLL
   value[0]    level
   value[1]    spell name 1
   value[2]    spell name 2
   value[3]    spell name 3

03 ITEM_WAND
   value[0]    level
   value[1]    max charges
   value[2]    current charges
   value[3]    spell name

04 ITEM_STAFF
   value[0]    level
   value[1]    max charges
   value[2]    current charges
   value[3]    spell name

05 ITEM_WEAPON
   value[0]    unused
   value[1]    unused (formerly min damage)
   value[2]    unused (formerly max damage)
   value[3]    weapon type:
      00     hit
      01     slice
      02     stab
      03     slash
      04     whip
      05     claw
      06     blast
      07     pound
      08     crush
      09     smash
      10     bite
      11     pierce
      12     suction
      13     chop
      14     lunge -- used for stakes
      17     fangs
      18     spikes
      19     hack
      20     cut

08 ITEM_TREASURE
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused

09 ITEM_ARMOR
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused

10 ITEM_POTION
   value[0]    level
   value[1]    spell name 1
   value[2]    spell name 2
   value[3]    spell name 3

12 ITEM_FURNITURE
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused


13 ITEM_TRASH
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused

15 ITEM_CONTAINER
   value[0]    weight capacity
   value[1]    flags: 1 closeable, 2 pickproof, 4 closed, 8 locked

value[1] =  0 = open,   may not be closed,        may be picked,     is not locked
value[1] =  1 = open,   may be opened and closed, may be picked,     is not locked
value[1] =  2 = open,   may not be closed,        may not be picked, is not locked
value[1] =  3 = open,   may be opened and closed, may not be picked, is not locked
value[1] =  4 = closed, may not be opened,        may be picked,     is not locked
value[1] =  5 = closed, may be opened and closed, may be picked,     is not locked
value[1] =  6 = closed, may not be opened,        may not be picked, is not locked
value[1] =  7 = closed, may be opened and closed, may not be picked, is not locked
value[1] =  8 = open,   may not be closed,        may be picked,     is locked
value[1] =  9 = open,   may be opened and closed, may be picked,     is locked
value[1] = 10 = open,   may not be closed,        may not be picked, is locked
value[1] = 11 = open,   may be opened and closed, may not be picked, is locked
value[1] = 12 = closed, may not be opened,        may be picked,     is locked
value[1] = 13 = closed, may be opened and closed, may be picked,     is locked
value[1] = 14 = closed, may not be opened,        may not be picked, is locked
value[1] = 15 = closed, may be opened and closed, may not be picked, is locked

   value[2]    key vnum
   value[3]    unused

17 ITEM_DRINK_CON
   value[0]    capacity
   value[1]    current quantity
   value[2]    liquid number (see table below)
   value[3]    if non-zero, drink is poisonous

	liquid numbers
	water			 0
	beer			 1
	wine			 2
	ale			 3
	dark ale		 4
	whisky		 	 5
	lemonade		 6
	firebreather		 7
	local specialty	 	 8
	slime mold juice	 9
	milk			10
	tea			11
	coffee			12
	blood			13
	salt water		14
	cola			15
	root beer		16
        chocolate milk          17
        rum                     18
        grog                    19
	orange juice		20
	kerosene                21
	vodka                   22
	soup                    23
	honey                   24

18 ITEM_KEY
   value[0]    unused (often vnum of room/container it unlocks)
   value[1]    unused
   value[2]    unused
   value[3]    unused

19 ITEM_FOOD
   value[0]    hours of food value
   value[1]    unused
   value[2]    unused
   value[3]    if non-zero, food is poisonous

20 ITEM_MONEY
   value[0]    unused (used to be amount, now the amount is determined by
   value[1]    unused      the level of the most recently reset mobile above
   value[2]    unused      this items reset)
   value[3]    unused


22 ITEM_BOAT
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused

23 ITEM_CORPSE_NPC
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused

24 ITEM_CORPSE_PC
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused


25 ITEM_FOUNTAIN
   value[0]    unused
   value[1]    unused
   value[2]    liquid number (see table on ITEM_DRINK_CON)
   value[3]    if non-zero, liquid is poisonous

26 ITEM_PILL
   value[0]    level
   value[1]    spell name 1
   value[2]    spell name 2
   value[3]    spell name 3

27 ITEM_TOOL
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused

28 ITEM_PART
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused

29 ITEM_INGREDIENT
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused

30 ITEM_MAP
   value[0]    unused
   value[1]    unused
   value[2]    unused
   value[3]    unused


Examples:
ITEM_ARMOR:
0~ 0~ 0~ 0~
(all values are set internally)

ITEM_WEAPON:
0~ 0~ 0~ 11~
(damage range value[1]-value[2] is set internally; this is a piercing weapon)

ITEM_POTION:
25~ teleport~ cure critical~ ~
(note that only two spells are used; the third is left blank)

ITEM_STAFF:
15~ 3~ 3~ ultrablast~

=== Spells

The following is a list of spells which can be used in Continents Mud. These
names would appear in the appropriate locations for wands, scrolls, staves,
potions, and pills.

acid blast         detect hidden        invis
acid breath        detect invis         lend health
adrenaline control detect magic         levitation
agitation          detect poison        lightning bolt
animate object     detonate             lightning breath
armor              disintegrate         locate object
awe                dispel evil          magic missile
ballistic attack   dispel magic         mass heal
biofeedback        displacement         mass invis
bless              domination           mental barrier
blindness          earthquake           mind thrust
breathe water      ectoplasmic form     mute
burning hands      ego whip             pass door
call lightning     enchant weapon       poison
cause critical     energy containment   polymorph other
cause light        energy drain         project force
cause serious      enhance armor        protection
cell adjustment    enhanced strength    psionic blast
change sex         faerie fire          psychic crush
charm person       faerie fog           psychic drain
chill touch        fire breath          psychic healing
colour spray       fireball             refresh
combat mind        flamestrike          remove alignment
complete healing   flaming shield       remove curse
cone of silence    flesh armor          remove silence
continual light    fly                  sanctuary
control flames     frost breath         share strength
control weather    gas breath           force shield
create sound       gate                 shocking grasp
create spring      general purpose      sleep
create water       giant strength       summon
cure blindness     harm                 teleport
cure critical      heal                 thought shield
cure light         high explosive       turn undead
cure poison        identify             ultrablast
cure serious       inertial barrier     ventriloquate
curse              inflict pain         weaken
death field        infravision          word of recall
destroy cursed     intellect fortres
detect align


Comments may be put into the OBJECTS section between items using * as a
comment identifier, do not put comments inside an object.

And a complete item from the githzerai castle:
#15010
black control staff~
Black staff of control~
A black staff that is neither wood or rock stands here.
~
~
4 64 16385
47~ 25~ 25~ charm person~
2 0 0
A
24 -5
*
* Comments may go here between objects
*

=== The #ROOMS section

The rooms in your area are what make your area.  It is here that the players
meet your mobs and fight for their lives.  Remember these rooms set the
atmosphere of the area.  Go beyond just regular descriptive words, use far
out language, have a thesaurus handy when writing your rooms so you can use
that one exact word that expresses what the room is trying to convey.
I can't stress enough that your descriptions even if short have to create the
atmosphere.  Even the room string can add to the affect.
The syntax of this section is:

    #ROOMS
    {
     #&ltvnum:number&gt
     &ltname:string&gt
     &ltdescription:string&gt
     &ltarea:number&gt &ltroom-flags:number&gt &ltsector-type:number&gt
     {
         D (or H) &ltdoor:number&gt
         &ltdoor description:string&gt
         &ltdoor keywords:string&gt
         &ltlocks:number&gt &ltkey:number&gt &ltto_room:number&gt
     }
     {
         A &ltdoor:number&gt
     }
     {
         C &ltdoor:number&gt
     }
     {
         W &ltdoor:number&gt
     }
     {
         B &ltdoor:number&gt  &ltto_room:number&gt
     }
     {
         T
     }
     {
         E
         &ltkeywords:string&gt
         &ltdescription:string&gt
     }
     S
    }
    #0

The 'vnum' is the virtual number of the room.

The 'name' is the name of the room.

The 'description' is the long multi-line description of the room.

The 'area' is obsolete and unused.  Rooms belong to whatever area was most
recently defined with #AREA.

The 'room-flags' describe more attributes of the room.
ROOM_ flags:
  DARK                 1       need a light source
  NO_MOB               4       no mobs may enter although mobs may be set here
  INDOORS              8       this means -&gt You can't see the weather...
                               needs to be set for rooms inside, underground,
                               mines, caves, tunnels, underwater, etc.
  UNDERGROUND         16       room is underground (useful for avoiding sun)
  BANK                32       A bank
  PRIVATE            512       only 2 people allowed (or 1 mob, 1 player)
  SAFE              1024       no pkilling etc.
  SOLITARY          2048       only 1 person (or mob) allowed
  PET_SHOP          4096       A pet shop *
  NO_RECALL         8192       Can't recall
  CONE_OF_SILENCE  16384       No speech/spells/communication channels
  VACANT_LOT       32768       A place where a house may be built **
                                  note - must have only one exit, be followed
                                  by 2 blank rooms and be a specific
                                  sector-type.
  GAS_FILLED       524288      Chokes and poisons whoever is in room
  ROOM_DEATH_TRAP  2097152     Drops the player to 1 hp
  NO_TELEPORT      8388608     keeps people from teleporting into this room

* When building a pet shop it is vital that the next room is the pet shop
store room.  The pets to be sold in the shop are loaded into this room.
If the Vnum for the pet shop is #1234 the storeroom's Vnum MUST be #1235.

** Do NOT put any room flags on vacant lots or extra rooms. This can 
(and will) cause problems. All of the flags needed for houses are added 
when the house is built.

*** When placing a vacant lot add two extra blank rooms following the vacant
lot to allow for house expansion: e.g. (sample)

#3212
Empty Lot~
This is an empty lot that you can build a house upon.
~
0 0 2
D3
You see the main road.
~
~
0 -1 3211
S
#3213
An extra room~
You are standing in an extra room.
~
0 4 1
S
#3214
An extra room~
You are standing in an extra room.
~
0 4 1
S

The 'sector-type' identifies the type of terrain.  This affects movement cost
through the room.  Certain sector types (air and boat) require special
capabilities to enter.

Empty lots must be set to SECT_FOREST or SECT_HILLS or SECT_FIELD or SECT_CITY
for them to appear properly. Also please note that any other rooms that have
only a single entrace/exit must NOT be set to one of these or it will appear
as a lot for sale.

SECT_ types:
  INSIDE          0
  CITY            1
  FIELD           2
  FOREST          3
  HILLS           4
  MOUNTAIN        5
  WATER_SWIM      6 - for ponds, streams and the like
  WATER_NOSWIM    7 - for lakes, oceans, etc. where a "BOAT" must be used
                         Also called water/boat in some places
  UNDERWATER      8 - just as it says -&gt under water
  AIR             9 - must be flying to go here
  DESERT         10
  SWAMP          11

Unlike mobiles and objects, rooms don't have any keywords associated with
them. One may not manipulate a room in the same way one manipulates a mobile
or object.

The optional 'D' (or 'H'), 'A', 'W', 'C', 'B' and 'E' and 'T' sections come
after the main data.

A 'D'  (or 'H') section contains a 'doorway' in the range from 0 to 5 
and 7 to 10:

     0    north
     1    east
     2    south
     3    west
     4    up
     5    down
     6    (do not set 6 -- this is a random door, not set here)
     7    northeast
     8    southeast
     9    southwest
    10    northwest

A 'D' (or 'H') entry also contains a 'description' for that direction, and
'keywords' for manipulating the door (if there is one).  'Doorways' include 
not just real doors, but any kind of exit from the room.  The 'locks' value 
specifies special features about a door, and there are several combinations.  
Doors can be bashproof, pickproof, and passproof.  The following table gives 
the 'locks' value and how the door will be set for each acceptable value:

      value  pickproof  bashproof  passproof
        1        no         no         no
        2       yes         no         no
        3        no        yes         no
        4       yes        yes         no
        5        no         no        yes
        6       yes         no        yes
        7        no        yes        yes
        8       yes        yes        yes

        0 means a doorway, no door here

'D' may be replaced with 'H' to make a non-obvious (hidden) exit. When doing
this be sure to also include information in the room description (if
appropriate) so that people will know to look for this exit. In addition,
add an appropriate keyword e.g. if the exit is covered by a tapestry then
be sure to put "tapestry" in as the keyword for this exit.

Some additional notes about door keywords and doorway descriptions: 
1. Somewhere a rumor has gotten started that doorways should have directional 
   keywords. Doorways do NOT need directional keywords and in fact do not use 
   them. Just put the description sentence on a doorway to the north and one 
   looking "north" or looking "n" will see this description. The direction is 
   the default (and only) keyword for doorway descriptions.
2. The door keyword is used for two things. First, it can be used to lock, 
   unlock, open and close the door. Second, the first door keyword is what 
   people will see when they look at the doorway. "door" is the default keyword 
   for doors.
   
   If a door's keywords were
   'secret hidden small opening' secret hidden hole small opening
   and the doorway description was:
   This small hole goes through the castle wall.
 
   When one looked at the doorway, e.g. look east, they would see both the 
   doorway description and the condition of the door:
   This small hole goes through the castle wall.
   The secret hidden small opening is closed.
   
   -- The code takes care of telling that it is closed or open or bashed or 
      whatever.
   
   But if they looked at a door keyword, e.g. look small, they would only see:
   The secret hidden small opening is closed.
   
The 'key' value is the vnum of an object which locks and unlocks the door.

Lastly, 'to_room' is the vnum of the room to which this door leads.

You must specify two 'D' sections. One in each of the rooms that the door
connects.  If you specify just one then you'll get a one-way exit.

An 'A' section indicates that there is air flow (current) in the room.
The 'A' section contains a 'direction' in the range from 0 to 10:

     0    north
     1    east
     2    south
     3    west
     4    up
     5    down
     6    random
     7    northeast
     8    southeast
     9    southwest
    10    northwest

A 'C' section indicates that there is a current in the room. This
automatically moves the character without displaying a message.
Can be used for moving a character down into a well for example.
The 'C' section contains a 'direction' in the range from 0 to 10:

     0    north
     1    east
     2    south
     3    west
     4    up
     5    down
     6    random
     7    northeast
     8    southeast
     9    southwest
    10    northwest

A 'W' section indicates that there is water flow (current) in the room.
The 'W' section contains a 'direction' in the range from 0 to 10:

     0    north
     1    east
     2    south
     3    west
     4    up
     5    down
     6    random
     7    northeast
     8    southeast
     9    southwest
    10    northwest

A 'B' section indicates that a bridge may be built from or to this room.
The 'B' section contains a 'direction' in the range from 0 to 3 and 7 to 10:

     0    north
     1    east
     2    south
     3    west
     7    northeast
     8    southeast
     9    southwest
    10    northwest

Bridges may be built vertically but those then show up as stairs. So to
put in places that connect with stairs use dircetions (4 - up or 5 - down).

Only one direction per room may be used for a bridge. (only one bridge per
customer, please). This section also contains the vnum of the other room
to which the bridge will attach.

You must specify two 'B' sections, one for each side of the bridge. One in
each of the rooms that the bridge connects. This is a MUST, bridges can not
be anchored on thin air on either end.

A 'T' indicates a Death Trap. Death Trap rooms should also be set to NO_MOB
and SAFE (and of course do not load aggresive mobs) or we will end up with
highly incensed players.

An 'E' section (extended description) contains a 'keywords' string and a
'description' string.  As you might guess, looking at one of the words in
'keywords' yields the 'description' string.

The 'S' at the end marks the end of the room.  It is not optional.

The outhouse from the githzerai castle will serve to illustrate most of the
commands.  Including an extra description that adds flavour to the room.
With the extra descriptions and the right wording, you can make your rooms
come alive.

Comments may be put into the ROOMSS section between rooms using * as a
comment identifier, do not put comments inside a room.

#15017
Outhouse~
     You stand in a small revolting outhouse.  There is a little box like
chair with a hole cut in the middle.  From this hole a faint brownish mist
pours forth.  You have to hold your breath to prevent yourself from releasing
your last meal.  The walls are covered with mild and the seat is beginning to
rot.  Just before the hole, the floor is wet.

The only exit is to the west, thank god you left the door open.
~
0 1 0
E
hole~
     You hold your breath and plug your nose to look in the hold.  At
the bottom you see a large pile that does not look pleasant.  Your
last meal comes bubbling up and spews forth adding to the pile.  You
quickly stand straight up and notice that everything now looks blurry.
You stand for a second with your head out of the door to clear yourself. ~
D1
The door is the only way out of this smelly and sickening place. ~
door~
1 -1 15016
E
door~
The door on this side is covered with more scratch marks.  It's as if the
people who come in here don't want to be here for long.... ~
S
*
* Comments may go here between rooms
*

=== The #RESETS section

The most important section of the area, and the easiest to mess up.  It is
here that you place your mobs and equip them.  Make sure you use the proper
location flags.

The syntax of this section is:

    #RESETS
    {
     * &ltcomment:to_eol&gt
    }
    {
     M 0 &ltmob-vnum:number&gt  &ltlimit:number&gt     &ltroom-vnum:number&gt &ltcomment:to_eol&gt
    }
    {
     O 0 &ltobj-vnum:number&gt  &lt:number&gt          &ltroom-vnum:number&gt &ltcomment:to_eol&gt
    }
    {
     P 0 &ltobj-vnum:number&gt  &lt:number&gt          &ltobj-vnum:number&gt  &ltcomment:to_eol&gt
    }
    {
     G 0 &ltobj-vnum:number&gt  0                                     &ltcomment:to_eol&gt
    }
    {
     E 0 &ltobj-vnum:number&gt  0                  &ltwear_loc:number&gt  &ltcomment:to_eol&gt
    }
    {
     D 0 &ltroom-vnum:number&gt &ltdoor:number&gt      &ltstate:number&gt     &ltcomment:to_eol&gt
    }
    {
     R 0 &ltroom-vnum:number&gt &ltlast-door:number&gt                    &ltcomment:to_eol&gt
    }
    S

The 'resets' section contains a series of single lines. Because of the
end-of-line comments, this section is not as free-format as other sections.

The reset commands are:
    *     comment
    M     read a mobile
    O     read an object
    P     put object in object
    G     give object to mobile
    E     equip object on mobile
    D     set state of door
    R     randomize room exits
    S     stop (end of list)

The '*' lines contain comments and may go between any resets.

The 'S' line is the last line of the section.

Every command contains four numbers (three for the 'G' command).  The
first number indicates how often the reset should trigger. A '0' indicates a
'slow' reset, a '1' indicates a fast reset. The next three (or two) numbers
are interpreted as follows:

For the 'M' command, the second number is the vnum of a mobile to load.  The
third number is the limit of how many of this mobile may be present in the
world if the mobile is NOT sentinel.  NOTE, world! not room.  BUT, if the
mobile is set to be sentinel, the third number is limit present in the room.
The fourth number is the vnum of the room where the mobile is loaded.

For the 'O', 'P', 'G', and 'E' commands, the second number is the vnum of an
object to load.  The third number is ignored.

For the 'O' command, the fourth number is the vnum of the room where the
object is loaded.  The object is not loaded if the target room already
contains any objects with this vnum.  The object is also not loaded if any
players are present in the area.

For the 'P' command, the fourth number is the vnum of a container object
where the object will be loaded.  The actual container used is the most
recently loaded object with the right vnum; for best results, there should be
only one such container in the world.  The object is not loaded if no
container object exists, or if it already contains one of the
to-be-loaded object.

For the 'G' command, there is no fourth number.  If the most recent 'M'
command succeeded (e.g. the mobile limit wasn't exceeded), the object is
given to that mobile.  If the most recent 'M' command failed (due to hitting
mobile limit), then the object is not loaded.

For the 'E' command, the fourth number is an equipment location.  Be careful
where you equip the mobile or you might end up with a breast plate used as
a weapon. If the most recent 'M' command succeeded, that mobile is equipped
with the object.  If the most recent 'M' command failed, then the object
is not loaded.

Equipment wear locations:
This tells the location where the mob is wearing it.
  None             -1 (in inventory)
  Light             0
  Left Finger       1
  Right Finger      2
  Neck 1            3
  Neck 2            4
  Body              5
  Head              6
  Legs              7
  Feet              8
  Hands             9
  Arms             10
  Shield           11
  About body       12
  Waist            13
  Left Wrist       14
  Right Wrist      15
  Wield            16
  Held             17
  Wield Two hands  18 (Not implemented )
  With Pride       19
  Face             20
  Supply           21 (on the portable workbench)
  On back          22

All objects have a level limit, which is computed by inheritance
from the most recently read 'M' command (whether it succeeded or not).
An object's level equals the mobile level minus 2, clipped to the range
0 to 75.

   The above info is how we can get into trouble with item levels. If an
   amount of money is reset into a chest, the level of the last mob in the
   reset list before this reset will determine the amount of money in the
   chest. e.g. If a level 50 mob is the last mob reset in the reset list
   before this reset then the chest will contain the amount of money that a
   level 50 mob would normally carry. This also applies to other items,
   if e.g. a sword is reset into a cabinet, or room, then the level of the
   sword will be approximately the level of the mob reset closest above the
   sword's reset. This is handy when items are reset on mobs because the item
   resets at the appropriate level for that mob and if the mobs level is
   changed the items level will be changed also.

For the 'D' command, the second number is the vnum of a room.  The third
number is a door number from 0 to 5 and 7 to 10.  The fourth number
indicates how to set the door: 0 for open and unlocked; 1 for closed and
unlocked; 2 for closed and locked.

Room exits should be coherent: if room 1 has an exit to room 2, and room 2
has an exit in the reverse direction, that exit should go back to room 1.
This doesn't prevent one-way exits; room 2 doesn't HAVE to have an exit in
the reverse direction.

For the 'R' command, the second number is the vnum of a room.  The third
number is a door number.  With this command, the doors from 0 to the
indicated door number are shuffled.  The room will still have the same exits
leading to the same other rooms as before, but the directions will be
different.  Thus, a door number of 4 makes a two-dimensional maze room; a
door number of 6 makes a three-dimensional maze room.

Use of both the 'D' and 'R' commands on the same room will yield
unpredictable results.

Any line (except an 'S' line) may have a comment at the end.

Please, do not use previously defined items.  That is: do not reset items
that are defined in another area. e.g. If you would like your grocer to sell
oranges, build some in your area instead of loading the ones from Ofcol.
We wish to keep our areas independent of each other, so there will be no
conflicts no matter the order they are loaded or if an area needs to be
removed.

Reset examples from Midgaard:

M 1 3052   1 3107	Midgaard Mayor's secretary to town hall (one of 1 allowed to exist)
*
M 1 3053   1 3108	Midgaard Mayor to his office (one of 1 allowed to exist)
E 1 3056  80 17		Have him hold the City Key (one of 80 allowed to exist)
E 1 3051  80 16		Have him wield the Mayor's sword (one of 80 allowed to exist)
*
M 1 3038   4 3108	Cityguard for the Mayor to Mayor's office (one of 4 allowed to exist)
E 1 3116  99 0		Have him hold a banner (light) (one of 99 allowed to exist)
E 1 3115  99 1		Have him wear a signet ring (one of 99 allowed to exist)
E 1 3101 199 16		Have him wield a sword (one of 199 allowed to exist)
M 1 3038  4 3108	Cityguard for the Mayor to Mayor's office (one of 4 allowed to exist)
E 1 3116  99 0		Have him hold a banner (light) (one of 99 allowed to exist)
E 1 3115  99 1		Have him wear a signet ring (one of 99 allowed to exist)
E 1 3101 199 16		Have him wield a sword (one of 199 allowed to exist)
M 1 3038   4 3108	Cityguard for the Mayor to Mayor's office (one of 4 allowed to exist)
E 1 3116  99 0		Have him hold a banner (light) (one of 99 allowed to exist)
E 1 3115  99 1		Have him wear a signet ring (one of 99 allowed to exist)
E 1 3101 199 16		Have him wield a sword (one of 199 allowed to exist)
M 1 3038   4 3108	Cityguard for the Mayor to Mayor's office (one of 4 allowed to exist)
E 1 3116  99 0		Have him hold a banner (light) (one of 99 allowed to exist)
E 1 3115  99 1		Have him wear a signet ring (one of 99 allowed to exist)
E 1 3101 199 16		Have him wield a sword (one of 199 allowed to exist)
*
M 1 3000 1 3032		The Wizard Shop Keeper to the magic shop (one of 1 allowed to exist)
G 1 3138 500		recall potion to inventory (which he will sell since he is also a shop)
G 1 3016 500		identify scroll to inventory (which he will sell since he is also a shop)
G 1 3017 500		potion of see invisible to inventory (which he will sell since he is also a shop)
G 1 3068 500		wand of breathe water to inventory (which he will sell since he is also a shop)
*
M 1 3003 1 3010		The weaponsmith to the weapon shop (one of 1 allowed to exist)
E 1 3011 100 16		wields a longsword (one of 100 allowed to exist)
G 1 3009 100		give him a dagger (to sell)
G 1 3010 100		give him a small sword (to sell)
G 1 3011 100		give him a long sword (to sell)

Reset examples from Haon:

M 1 6000  1 6009	John the Lumberjack to Outside a small cabin in the forest (one of 1 allowed to exist)
E 1 6000 10 16		Have him wield an axe (one of 10 allowed to exist)
E 1 6001 10 5		Have him wear a shirt (one of 10 allowed to exist)
E 1 6002 10 8		Have him wear boots (one of 10 allowed to exist)
D 1 6009  0 1		Close the door (north) to his Cabin (Outside a small cabin in the forest)
M 1 6012  5 6012	Rabbit 1 (one of 5 allowed to exist)
M 1 6012  5 6015	Rabbit 2 (one of 5 allowed to exist)
M 1 6012  5 6017	Rabbit 3 (one of 5 allowed to exist)
M 1 6012  5 6019	Rabbit 4 (one of 5 allowed to exist)
M 1 6001  1 6022	Brown bear to his cave (one of 1 allowed to exist)
*
O 1 6003  1 6010	John's fireplace into the cabin (one of 1 allowed to exist)
O 1 6004  1 6010	John's wooden chest into the cabin (one of 1 allowed to exist)
P 1 6006  1 6004	Put some coins into the chest (one of 1 allowed to exist)
P 1 6005  1 6003	Put the brass key into the fireplace (one of 1 allowed to exist)
O 1 6009  3 6010	Water barrel into the cabin (one of 3 allowed to exist)

=== The #SHOPS section

The syntax of this section is:

    #SHOPS
    {
     &ltkeeper:number&gt                                        \
     &lttrade-0:number&gt &lttrade-1:number&gt &lttrade-2:number&gt     \
     &lttrade-3:number&gt &lttrade-4:number&gt                      \
     &ltprofit-buy:number&gt &ltprofit-sell:number&gt               \
     &ltopen-hour:number&gt &ltclose-hour:number&gt                 \
     &ltcomment:to_eol&gt
    }
    0

Like the #RESETS section, the #SHOPS section has one command per line.

The 'keeper' is the vnum of the mobile who is the shopkeeper.  All mobiles
with that vnum will be shopkeepers. Please only reset one of each vnum
shopkeeper, if you want more than one make another mob and reset it into
the second location.

The 'trade-0' through 'trade-4' numbers are item types (listed again below for
easy reference) which the shopkeeper will buy.  Unused slots should have a '0'
in them; for instance, a shopkeeper who doesn't buy anything would have five
zeroes.

The 'item-type' is the type of the item.

ITEM_ types:
  LIGHT         1
  SCROLL        2
  WAND          3
  STAFF         4
  WEAPON        5
  TREASURE      8
  ARMOR         9
  POTION       10
  FURNITURE    12
  TRASH        13
  CONTAINER    15
  DRINK_CON    17
  KEY          18
  FOOD         19
  MONEY        20
  BOAT         22
  CORPSE_NPC   23
  CORPSE_PC    24
  FOUNTAIN     25
  PILL         26
  TOOL         27
  PART         28
  INGREDIENT   29
  MAP          30

The 'profit-buy' number is a markup for players buying the item, in
percentage points.  100 is nominal price; 150 is 50% markup, and so on.  The
'profit-sell' number is a markdown for players selling the item, in
percentage points. 100 is nominal price; 75 is a 25% markdown, and so on.
The buying markup should be at least 100, and the selling markdown should be
at most 100.


The 'open-hour' and 'close-hour' numbers define the hours when the shopkeeper
will do business.  For a 24-hour shop, these numbers would be 0 and 23.
Everything beyond 'close-hour' to the end of the line is taken to be a
comment.

Note that there is no room number for a shop.  Just load the shopkeeper
mobile into the room of your choice, and make it a sentinel.  Or, for a
roving shopkeeper, just make it non-sentinel.

The objects a shopkeeper sells are exactly those loaded by 'G' reset commands
for that shopkeeper.  These items replenish automatically.  If a player sells
an object to a shopkeeper, the shopkeeper will keep it for resale if he, she,
or it doesn't already have an identical object.  These items do not
replenish.

SHOPS example from Midgaard:

3000 2 3 4 10 0 105 15 0 23	* The Wizard (buys scrolls, wands, staves, and potions
                                * for 15% of their value and sells them for 105%. His
                                * shop is open all 24 hours)
3003 5 0 0 0 0 130 40 0 23	* The Weaponsmith (buys, what else, weapons for 40% of
                                * their value and sells them for 130%. His shop is open
                                * all 24 hours)
3009 8 0 0 0 0 150 50 9 17	* The Jeweller (buys treasure for 50% of its value and
                                * sells it for 150%. His shop is open from 9 o'clock to
                                * 17 o'clock [ 9 to 5] )

Separate line comments as done above will not work, in-line comments like that below
is ok.

3000 2 3 4 10 0 105 15 0 23	* The Wizard in the magic shop


=== The #SPECIALS section

Use this section to make your mobs mages, clerics etc...

The syntax of this section is:

#SPECIALS
    {
     * &ltcomment_to_eol&gt
    }
    {
     M &ltmob-vnum:number&gt &ltspec-fun:word&gt &ltcomment:to_eol&gt
    }
    S

Like the #RESETS section, the #SPECIALS section has one command per line.

The 'M' command assigns 'spec-fun' to all mobiles of with virtual number
'mob-vnum'.  All spec-fun's are assigned by name.  An 'M' line may have a
comment at the end.

SPEC-FUNS are listed below.



The following special functions are available for mobiles:

spec_breath_any		Dragon breath randomly chosen from the 5 below
spec_breath_acid	Acid Breath
spec_breath_fire	Fire Breath
spec_breath_frost	Frost Breath
spec_breath_gas		Gas Breath
spec_breath_lightning	Lightning Breath
spec_cast_adept		Healer -- casts spells to help newbies
spec_cast_cleric	Casts Clerical spells
spec_cast_ghost		Undead ghost (repop during night, gone by day)
spec_cast_judge		Combative Mage in Mega1.are
spec_cast_mage		Casts Mage spells
spec_cast_psionicist	Casts Psionicist spells
spec_cast_undead	Undead (generic)
spec_executioner	Executioner -- only for use with MG executioner
spec_fido		Corpse-eating mobile
spec_guard		cityguard -- will assist good against evil
spec_janitor		Janitor -- picks up trash
spec_mayor		Midgaard Mayor -- do not use
spec_poison		Poisonous Bite
spec_repairman		Bashed Door Repairman
spec_thief		Pick-pocketing Thief

An example from draconia.are would be thus:

M  2243 spec_breath_any

=== The #GAMES section
( Games and gambling structure developed by Thelonius for EnvyMud )
( Fixed so it would work by Maniac of Mythran )
( Modified for Continents by Rudder )

Use this section to allow your mobs to host gambling games.

The syntax of this section is:

#GAMES
    {
     * &ltcomment_to_eol&gt
    }
    {
     M &ltmob-vnum:number&gt &ltgame-fun:string&gt~ &ltbankroll:number&gt \
       &ltmax_wait:number&gt &ltcheat:number&gt                       \
       &ltcomment:to_eol&gt
    }
    S

Like the #RESETS and #SPECIALS sections, the #GAMES section has one command
per line.

The 'M' command assigns 'game-fun' to all mobiles of with virtual number
'mob-vnum'.  All game-fun's are assigned by name.

The 'bankroll' is the amount of gold that the croupier (the mob running
the game) has when it is loaded.  When the bankroll goes below zero, the
mob shuts down its game.

The 'max_wait' value is the number of PULSE_MOBILE's the croupier will wait
for each person to make a decision.  PULSE_MOBILE is defined in contnent.h,
and is currently 5 seconds per pulse.  The wait between rounds depends upon
the number of players, not 'max_wait'. None of the games currently available
use this value.

If 'cheat' is non-zero (meaning TRUE), this mobile will cheat at the given
game, if such code is in place.

An 'M' line may have a comment at the end.

The following game functions are available for mobiles:

game_u_l_t			Upper-Lower-Triple, a dice game
game_high_dice			High dice, another dice game
game_seven			Under or Over or 7, yet another dice game

Here is an example of a #GAMES section:

#GAMES
*
M 3058 upper-lower-triple~	100000	  4	0	/* Croupier */
M 3027 seven~                   100000    4     0       /* Filthy   */
M 3044 high_dice~               100000    4     0       /* Bar Maid */
*
S

=== The #MOBPROGS section
In the #MOBPROGS section list as many lines as you desire of:

M &ltVnum&gt &ltMOBprogram_filename&gt

followed by a line starting with a 'S' (case insensitive)

The syntax of this section is:

#MOBPROGS
    {
     * &ltcomment_to_eol&gt
    }
    {
     M &ltmob-vnum:number&gt &ltmobprog file name&gt &ltcomment:to_eol&gt
    }
    S

Like the #RESETS and #SPECIALS and #GAMES sections, the #MOBPROGS section has
one command per line.

The 'M' command assigns a 'mobprog' to all mobiles of with virtual number
'mob-vnum'.

The VNUM is whatever number mobile to which you are associating the MOBprogram.
The MOBPROGRAM_FILENAME is the name of the external file of MOBprograms.
It is NOT case INsensitive (It is case sensitive - yes).

Example:

#MOBPROGS
*
M 3001 baker.prg
M 3008 petboy.prg
M 3011 execut.prg
M 3028 dave.prg
*
S

=== The #SOCIALS section

The syntax of this section is:

#SOCIALS
    {
     * &ltcomment_to_eol&gt
    }
    {
     &ltwhat the player types in -&gt the social itself&gt
     &ltwhat the character sees if only the name of the social is entered ( aargh )&gt
     &ltwhat others in the same room see if only the name of the social is entered ( aargh )&gt
     &ltwhat the character sees if the social is to another and they are there ( aargh someone )&gt
     &ltwhat others see if the social is to another and they are there ( aargh someone )&gt
     &ltwhat someone sees if the social is to them ( aargh someone )&gt
     &ltwhat the character sees if the social is to another and they are NOT there ( aargh someone )&gt
     &ltwhat the character sees if social is to self ( aargh self )&gt
     &ltwhat others in the same room see if social is to self ( aargh self )&gt
    }
#0

Examples:

aargh
AAAAAARRRRRRGGGGGGHHHHHH!!!!!!
$n throws back $s head and howls in profound frustration!
You scream your frustration and grab for $S's throat with both hands!
$n howls in frustration, and leaps for $N, trying to throttle $M!
$n grabs for your throat with two hands, howling in frustration!
You get even MORE frustrated when you can't find anyone to throttle!
You scream in frustration at your own stupidity!
$n screams in frustration at $s own stupidity!

agree
You agree.
$n agrees.
You agree with $M.
$n agrees with $N.
$n agrees with you.
Sorry, they are not here to agree with.
Well I hope you would agree with yourself!
$n agrees with $mself, of course.


All those $x and $X pieces can be very hairy.  The following is a reference
guide:

   $e  'he', 'she', or 'it', depending on the gender of actor (the one doing
        the social).

   $E  'he', 'she', or 'it', depending on the gender of receiver (the one to
       whom the social is done).

   $m  'him', 'her', or 'it', depending on the gender of actor (the one doing
       the social).

   $M  'him', 'her', or 'it', depending on the gender of receiver (the one to
       whom the social is done).

If you wanted for example himself or herself you would, of course, put $mself
or $Mself, as seen in the above "agree" example.

   $n  The name of actor (the one doing the social).

   $N  The name of the receiver (the one to whom the social is done).

   $r  'sir', 'madam', or 'buddy', depending on the gender of actor (the one
       doing the social).

   $R  'sir', 'madam', or 'buddy', depending on the gender of receiver (the
       one to whom the social is done).

   $s  'his', 'her', or 'its', depending on the gender of actor (the one
       doing the social).

   $S  'his', 'her', or 'its', depending on the gender of receiver (the one to
       whom the social is done).


=== The #$ section

The syntax of this section is:

    #$

This section marks the end of an area file.  If you concatenate several area
files into one, remember to delete the terminating '#$' from all but the last
file.  Conversely, if you split area files, remember to terminate each new
file with a '#$'.

===

If you have any questions about area writing, please contact any of the
immortals on Continents Mud, or perhaps get in touch with Rudder at
rudder@continentsmud.com (the main Continents guy) or Kastagaar at
kastagaar@continentsmud.com (the other main Continents guy) or Cerberus at
cerberus@continentsmud.com (the area guy) or Tina at tina@continentsmud.com (the
head builder).

Now that you have read how to make the area, you need to know what to use to
make it.  I suggest you make it in a text editor (note pad works pretty well),
or you can use an application like MS Word by using "Text Only" option when
you save it.  This way, you can spell check your area before handing it in.
There is also a handy program called "Make Zones Fast" made by Slash. This
program can be really handy for getting an area started but it doesn't support
any of the extra options that Continents mud has but standard Envy doesn't, you
will have to add these with a text editor after you have the area roughed in.
See http://www.snible.org/mud/mzf.html for details. When downloading be sure
to also get the extra portion that supports Envy format.