Area Writers Guide
Continents Release 1.0 — based on EnvyMud 2.0. Reference for the .are file format used by MCF.
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, <value:type> 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 <area-name:string>
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
{
<level:number> <keywords:string>~
<help-text:string>~
}
{
<level:number> <keywords:string>~
<help-text:string>~
}
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' <victim>
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 <recall-point:number>
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
{
#<vnum:number>
<keywords:string>
<short-description:string>
<long-description:string>
<description:string>
<act-flags:number> <affected-flags:number> <alignment:number> {P}S
<level:number> <hitroll:number> <armor:number> \
<hitnodice:number> d <hitsizedice:number> + <hitplus:number> \
<damnodice:number> d <damsizedice:number> + <damroll:number>
<gold:number> <exp:number>
<position:number> <race name:string> <sex:number>
}
#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
{
#<vnum:number>
<keywords:string>~
<short-description:string>~
<long-description:string>~
<action-description:string>~
<item-type:number> <extra-flags:number> <wear-flags:number>
<value-0:string>~ <value-1:string>~ <value-2:string>~ <value-3:string>~
<weight:number> <cost:number> <cost-per-day:number>
{
E
<keyword:string>
<description:string>
}
{
A
<apply-type:number> <apply-value:number>
}
}
#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
{
#<vnum:number>
<name:string>
<description:string>
<area:number> <room-flags:number> <sector-type:number>
{
D (or H) <door:number>
<door description:string>
<door keywords:string>
<locks:number> <key:number> <to_room:number>
}
{
A <door:number>
}
{
C <door:number>
}
{
W <door:number>
}
{
B <door:number> <to_room:number>
}
{
T
}
{
E
<keywords:string>
<description:string>
}
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 -> 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 -> 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
{
* <comment:to_eol>
}
{
M 0 <mob-vnum:number> <limit:number> <room-vnum:number> <comment:to_eol>
}
{
O 0 <obj-vnum:number> <:number> <room-vnum:number> <comment:to_eol>
}
{
P 0 <obj-vnum:number> <:number> <obj-vnum:number> <comment:to_eol>
}
{
G 0 <obj-vnum:number> 0 <comment:to_eol>
}
{
E 0 <obj-vnum:number> 0 <wear_loc:number> <comment:to_eol>
}
{
D 0 <room-vnum:number> <door:number> <state:number> <comment:to_eol>
}
{
R 0 <room-vnum:number> <last-door:number> <comment:to_eol>
}
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
{
<keeper:number> \
<trade-0:number> <trade-1:number> <trade-2:number> \
<trade-3:number> <trade-4:number> \
<profit-buy:number> <profit-sell:number> \
<open-hour:number> <close-hour:number> \
<comment:to_eol>
}
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
{
* <comment_to_eol>
}
{
M <mob-vnum:number> <spec-fun:word> <comment:to_eol>
}
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
{
* <comment_to_eol>
}
{
M <mob-vnum:number> <game-fun:string>~ <bankroll:number> \
<max_wait:number> <cheat:number> \
<comment:to_eol>
}
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 <Vnum> <MOBprogram_filename>
followed by a line starting with a 'S' (case insensitive)
The syntax of this section is:
#MOBPROGS
{
* <comment_to_eol>
}
{
M <mob-vnum:number> <mobprog file name> <comment:to_eol>
}
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
{
* <comment_to_eol>
}
{
<what the player types in -> the social itself>
<what the character sees if only the name of the social is entered ( aargh )>
<what others in the same room see if only the name of the social is entered ( aargh )>
<what the character sees if the social is to another and they are there ( aargh someone )>
<what others see if the social is to another and they are there ( aargh someone )>
<what someone sees if the social is to them ( aargh someone )>
<what the character sees if the social is to another and they are NOT there ( aargh someone )>
<what the character sees if social is to self ( aargh self )>
<what others in the same room see if social is to self ( aargh self )>
}
#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.