CALENDAR MONTH DAY DATE TIME

     Months                        Days of the Week
     ===========                   ====================
  1  Month of Winter               Day of the Moon
  2  Month of the Winter Wolf      Day of the Bull
  3  Month of the Frost Giant      Day of the Deception
  4  Month of the Old Forces       Day of Thunder
  5  Month of the Grand Struggle   Day of Freedom
  6  Month of the Spring           Day of the Great Gods
  7  Month of Nature               Day of the Sun
  8  Month of Futility
  9  Month of the Dragon
 10  Month of the Sun
 11  Month of the Heat
 12  Month of the Battle
 13  Month of the Dark Shades
 14  Month of the Shadows
 15  Month of the Long Shadows
 16  Month of the Ancient Darkness
 17  Month of the Great Evil
#
TEST

Copper's test mud is available to players at various times, usually before
new features are about to be added to the mud. It is usually up on port
7734, but can show up nearly anywhere except 400x.

Note that the test mud is not for playing. It is for testing, hence the
name. Reimbursement is not valid, and certain rules do not hold over
there either. Test is strictly for the convenience of the implementors,
and is likely to crash or be brought down at any time, without warning.
#
JAIL POLICE BOT WATCHMAN JAILKEEPER

Jail is where people are sent for committing offenses. These offenses are,
for the moment, attacking a humanoid and stealing from a humanoid (local
law enforcement is very humanoidocentric). Certain mobs will be on the
lookout for such crimes, and notify the authorities, if possible. Once an
outlaw, a person may be arrested by bots, who wander around a town, or
a watchman, who watch specific entrances/exits in a town.

In jail, outlaws are assigned a sentence to serve, which will be kept
track of by the jailkeeper of the town. When the term is served, the
offender is released, and no longer is an outlaw. Attempts to escape are
frowned upon. It should be known that the Jailkeeper is unable to count
down an outlaw's jail term, if that outlaw is in limbo from idleness.

NOTE: This law enforcement system does not look at (killer) or (thief)
flags. It only affects those who have been witnessed by witness mobs.
#
FLY

This command will let you fly around wherever you want, provided you
are able to get off the ground at all.

The spell of the same name lasts 2*level of the caster hours.
#
LEVITATE

This command will let you raise off the ground and travel within a
horizontal plane without regard for what surface you travel over, if
any. Of course, you need to have the ability to get off the ground to
begin with.

The spell of the same name lasts 2*level of the caster hours.
#
SEARCH

Sometimes, items will not be evident in a room, or inside some other
object. This command may, or may not, reveal such items.
#
AUCTION

Syntax: "auction" | "auction on" | "auction off" | "auction <mesg>"

"Auction" by itself will toggle the current state of listening to the
auction channel. "On" or "Off" will change to those settings. "Auction
<mesg>" will broadcast <mesg> over the auction channel.

Please confine messages on the auction channel to buying and selling
items.
#
TAG

Syntax: "tag <someone>"

Players who are "IT" will show up flagged as such in the "who" list,
and can get rid of this flag by tagging other people. Of course,
it's possible to tag back, so that all you players can go loony
chasing each other around the mud and tagging each other. The
original Tag flag must be created by a god, and tagging cannot be
done to NPC's.
#
TITLE

Syntax: "title <title of your choice>"

This command, available to players 10th level and higher, will allow
you to set your own title. You are limited to 45 characters.
#
NOSUMMON

Syntax: "nosummon"

This will toggle a nosummon flag on your character. If it is
set, you cannot be summoned by another mortal. If it unset, you
can be summoned by another mortal. Fairly simple. Remember to
unset it before you want to be summoned!!!!!!!!! The default is
not to have it set. . . .
#
"PICK LOCKS"

Thieves only.
For picking locks. Not all locks can be picked. Example:

> pick door
> pick safe

See Also : OPEN, CLOSE, LOCK, UNLOCK
#
DWEEB DWEEBFLAG

This flag is given to people who blatantly violate the rules of
fair-play and other mud guidelines. The victim will be subject to:

- No shouting
- No attacking/casting spells
- No defensive capabilities
- No reciting/using
- Possible loss of levels upon death
- The wrath of the CopperDiku populace :-(
- other things far too gruesome to mention

So, as you can see, it is best to avoid getting this despicable flag!

See Also : IMMORTAL, FAIR, TRUSTED
#
FAIR PLAY FAIRPLAY

The rules of fair-play. Violators subject to the DWEEB flag!

1) No summoning someone to their death. (Ie., summoning to Lamia Land.)
2) No killing in safe areas
3) No exploiting of bugs for monetary/material gain or
   other players' detriment.
4) Multiple characters are permitted so long as they do not
   interact in any way (no grouping together, no giving away
   gold or equipment, etc.).
5) These rules subject to change without notice.

See also: DWEEB, TRUSTED, IMMORTAL.
#
TRUSTED TRUSTEDFLAG

Levels 21 and higher only. New level 21's are still mortals until they've
been assigned the TRUSTED flag by a level 23 or higher.  By assigning the
flag, the level 23 takes partial responsibility for any actions of the
immortal, so care should be used in granting the flag.

Level 21's may opt to remain mortal and continue to play with their character.
However, a TRUSTED level 21 must abide by all the rules governing Immortal
behavior (see HELP IMMORTAL). Failure to do so will result in losing the
trusted flag (or worse).

When the new CopperDiku is done for next year, this TRUSTED flag option will
surely be modified or removed...
#
SNEAK

Thieves Only.

Used for sneaking (moving in and out of rooms without anyone taking notice).
When you type sneak, there is no way to know if you actually sneak. If you
sucessfully sneak, then you'll continue to sneak for a little while.

Example:

  > sneak

See Also : HIDE
#
HIDE

Thieves Only.
When you type hide there is a chance that you hide in the room. If hidden
you can only be "sensed" by the "sense life" spell. Even if sensed your
identity will remain hidden. Hide is broken by pressing return, regardless
of wherther you typed a command or not.

Example:

  > hide
  Ok.
  >  (you wait for ex. 5 mins and remain hidden for 5 mins)

  >  (You pressed enter and no longer hide)
#
LOOK
For studying your surroundings. Examples:
look                                      
look AT the angel
look IN the bag
look to the south   (or just: look south)

Note that if you LOOK AT CORPSE you will not see its inventory.
To see what's inside a container (e.i. Corpse) use LOOK IN <OBJECT>.

See also : EXAMINE or READ
#
AC "-----------"

Is you armor class, it is defined roughly as follows:

  10 Naked person
   0 Very Heavily armored (Plate mail, and "two shields") 
 -10 Armored battle tank

#
OPEN CLOSE LOCK UNLOCK
Usage (example):
 > open portal
or
 > open portal to the south
   (if there's more than one to choose from)
#
NORTH SOUTH EAST WEST UP DOWN
To walk in a given direction.
#
EAT DRINK SIP TASTE
If you're hungry or thirsty. Example: eat hamburger.
#
WHO
Lists the people currently in the game. Some people may choose to remain
unseen.
#
GIVE
If you feel benevolent, you may give some stuff to someone in need. Example:
give bread to the beggar.
#
SAVE
Save your persona. This includes experience points, strength, gold, etc. Any
equipment you may have gathered is NOT saved.
#
STRING
For changing the text-strings associated with objects and characters. The
format is:

string <type> <name> <field> [<string> | <keyword>]

Type is either 'obj' or 'char'.
Field is one of the following(the names may be abbreviated):
Name                  (the call-name of an obj/char - kill giant)
Short                 (for inventory lists (obj's) and actions (char's))
Long                  (for when obj/character is seen in room)
Title                 (for players)
Description           (For look at. For obj's, must be followed by a keyword)
Delete-description    (only for obj's. Must be followed by keyword)

Where a string is expected as the last argument, a newline will make you enter
a string mode, and the game will prompt you for new lines to the string until
you exceed the maximum length for the string or you end a line with a '@'.
#
LOAD
For loading new objects or characters from the database. The format is:
load <type> <number>
Where <type> is either 'obj' or 'char', and number is the number of the object
or character you wish to create.
#
INVENTORY
If you're uncertain about what you're carrying, or simply want to check
that no thieves have got to your backpack.

See also: EQUIPMENT
#
EQUIPMENT
When you want to know what armor, weapon, charms etc. you're wearing.

See also: INVENTORY
#
KISS
Well can't you guess ?
#
WEAR
If you want to wear some clothes, armor or the likes.
For example : wear boots

See also: REMOVE, EQUIPMENT
#
WIELD
When you get tired of bashing monsters with your fists, you might consider
wielding a weapon. Example : wield sword

See also: REMOVE, EQUIPMENT
#
SCORE
Whenever you want to check whether you're still alive and healthy
or simply want to see how much money you have left.
The new and improved version also tells you how good your attributes are
(strength, intelligence, wisdom, dexterity, constitution), your
alignment (good, evil, neutral), and your armour class. You get the
advanced score after you've gained at least 3 levels.
#
SAY TELL WHISPER ASK
If you consider communicating with other beings, you might be understood
better if you start your sentences with either say, tell, or whisper.
Example : say I'm a jerk
          tell unclesam You're dead meat - sucker!

You can use ' as a shorthand for say, as in:

' hello there.

See NOTELL.
#
SHOUT YELL
These commands are for communicating on a larger scale throughout the
mud. Shout is global for all waking people who don't have NOSHOUT on.
Yell is a local variant that works best outdoors.

See NOSHOUT
#
NOTELL

NOTELL will allow you to ignore all tells from other players.
#
BOUNCE
If you feel like bouncing round the room this is just the command for you.
#
FRENCH
Don't you know how they kiss in France ?? - try it !
#
QUI SHUTDOW
Just to prevent accidental quittings and/or shutdowns.
This command doesn't DO anything, it simply is.
#
SMILE
Whenever you feel like smiling...
#
KILL HIT
A good way to start a fight. Does not work against player characters.
#
KICK
Fighters only.
The success of a kick depends upon how well you are learned. The higher
level you reach the harder you kick. There is one small catch - whenever
you kick (or miss) you will be unable to type any command for three 
rounds of 'Violence' - so be sure that you do not need to flee!

Fighters See Also : Rescue, Bash
#
BASH
Fighters only.
The success of a bash depends upon how well you are learned. To bash someone
is to attempt to 'knock' that person over. If you succeed you will inflict
minor damage, and cause the victim to fall on its rear. The victim will be
unable to issue any commands for 2 rounds of violence. If you miss you loose
your balance and fall.

Bash will not work in places where there is no footing.

A bash makes you unable to type commands for 2 rounds of violence.
Note that hitting a person who is resting/sitting will inflict 1.5*damage.
Fighters See Also : Rescue, Kick
#
RESCUE
Fighters Only.
A rescue is an attempt to make a monster hit you instead of the person being
rescued. You can only 'turn' one monster for each attempt. This is highly
useable when playing in groups.
#
STEAL

Thief Only.

Use steal to steal gold or items from people. The chance of not getting
caught depends on how well you have practiced steal, and if the person
is asleep.

Due to misuse of the steal command, it now requires at least 1,250 XP
points to steal from other players. You can still steal from monsters
at all levels.


Example:

> steal gold drunk

> steal sword mercenary
  (only possible if he is sleeping)

#
BACKSTAB

Thief only.

Is a way to sneak up on a person, and attempt to place you dagger in his
back, at exactly the point where it does most damage. A successful backstab
gives a damage multiplier, depending on level:



The chance of successfully backstabbing a person depends on how well you
have practiced backstab at your guild. You can always backstab sleeping
persons.
#
CAST
For "magical" people. If you want to throw a spell at someone or something.
Example : cast 'burning hands' <player>
   Note that the name of the spell must be enclosed by "'"s.

See also : help on each individual spell, for example:
  > help cure ligh
  > help ventri
  > help energy drain
#
DROP
If you lose interest in a carried item, you can drop it on the ground.
Example : drop bottle
  If you feel like getting rid of all your earthly possessions, you may use
"drop all".

See also: GET
#
PURGE
A way to make the world a little cleaner.
Usage:
  purge                         To empty a room of monsters and objects.
  purge <character>             To remove a living thing. Kicks out a player.
  purge <object>                Figure this one out yourself.
#
STAT

Usage: stat <room | zone | obj <name> | char/mob <name>>

This command reveals information about rooms, zones, objects, and mobs, and
is for trusted players only.
#
ORDER
In bars etc you can order things.
#
BUY SELL
Commands for the shops - very useful too !
#
WEATHER
If you're uncertain whether the sun is shining or the rain is pouring down.
#
READ
When you want to read something.
#
REMOVE
If you tire of wearing some armor or wielding a weapon.
Example : remove sword
#
SHOPS
Shops are places where the adventurer may purchase equipment for his quests,
and where he may sell his treasure if he should manage to survive the perils
with his life and sanity intact. Many shops trade only in a specific type of
merchandise. Thus, a baker may well refuse to buy your armor, even if it is of
high quality!
   To some people, the prospect of obtaining the entire inventory of a shop by
murdering the keeper may appear tempting - but beware: The shopkeepers are 
often rugged, capable men; roughened by years of trading and, indeed, surviving
in a world where the only safe prospect is death in the end.

See also: BUY, SELL, LIST, VALUE
#
SOCIAL ACTIONS
Commands mainly for social interaction:

amaze, applaud, bathe, beg, bleed, blush, bounce, bow, burp, cackle, caress,
chuckle, clap, comfort, cough, cringe, cry, cuddle, curtsey, dance, daydream,
drool, embrace, fart, flame, flip, fondle, french, frown, fume, gasp, giggle,
glare, grin, groan, grope, grovel, growl, hiccup, hop, hug, kiss, laugh, lick,
love, moan, nibble, nod, nudge, pat, peer, pinch, point, poke, ponder, pout,
puke, punch, purr, ruffle, scratch, scream, shake, shiver, shrug, sigh, sing,
slap, smirk, smile, snap, snarl, sneeze, snicker, sniff, snore, snuggle, spank,
spin, spit, squeeze, stare, steam, strut, sulk, tackle, tap, taunt, thank,
think, toss, touch, twiddle, wave, whine, whistle, wiggle, wince, wink,
worship, yawn, yodel
#
COMMANDS
A mechanical listing (the code already exists) of the known verbs.
#
WARRIOR FIGHTER
Warriors are known to have more strength than the average player. This makes
them better at hand-to-hand-combat, as they posess skills of violence and
fighting unequaled by the members of any other class. However, they lack the
ability to use magic of any sort.
   You can improve your skills by using the practice command.

See also: PRACTICE
#
THIEF
Thiefs are known to have very special qualities, that no other class offers.
Many of these qualities can come in handy in many situations, such as picking
locks.
   You can improve you skills by using the practice command.

See also: PRACTICE
#
CLERIC
Clerics have an ancient belief in not carrying sharp weapons. Hence, they can
only wield bludgeoning weapons. This class gives you the wisdom of peace,
blessing and healing, though it is possible to learn more violent spells.
You can improve your spells by using the practice command.

See also: PRACTICE
#
"MAGIC USER" WIZARD MAGE
This is the class of powerful and violent magic, but the magic user do not
control the nature, and can therefore not bless and such. You can improve
your spells by using the practice command.

See also: PRACTICE
#
PRACTICE PRACTISE
Practice is the way you improve your spells and skills. You must go to
your guildmaster to let him/her help you improve.
If you type practice, you will see which skills you can improve upon, and
how good you already are at these.
You can then use practice <skill>, to practice the appropriate skill.
You can only practise a certain amount for each level you gain, and you
do not have to save this, it can be accumulated.
#
EXITS
Gives you a list of the obvious exits from your location. Of course, the less
obvious ones won't show up here - you have to THINK in order to locate those.
#
LEAVE
If you feel claustrophobic, typing 'leave' will make you use the nearest
obvious exit to the outside.
#
ENTER
If you type 'enter' while you are outdoors, you'll enter any nearby shelter.
You can also follow 'enter' with an argument; for example, 'enter window'.
#
TIME
Gives you the current 'gametime'. Your initial reaction to the output of this
command may be one of surprise, but you'll get used to it. You'll have to, at
any rate, since certain things in the game depend on this particular notion
of time; the opening hours of the shops, for example.
#
BUG TYPO IDEA
For making useful suggestions to the maintainers of the game. Examples:

bug the entire game crashes when I type 'put bag in bag'
idea make a restaurant in Midgaard
typo 'sence' should be spelled 'sense'
#
QUIT
When you get tired of playing, you can leave the game by typing 'quit'. Note
that whatever stuff you might be carrying with you is simply left on the
ground. If you wish to have your equipment put away until you are able to come
back, you'll have to find an inn.

See also: INN
#
INN INNS
Inns are places where the weary traveler may rest while the innkeeper looks
after his equipment and treasure. Specifically, you may use inns to store your
gathered equipment while you are not playing the game (we all have to sleep
sometimes, there is no shame in that).

See also: OFFER, RENT
#
OFFER RENT
For use in the receptions of inns. The command 'offer' will make the innkeeper
tell you the cost of storing your carried items for one day. 'rent' will store
the items and make you leave the game. The next time you enter, you'll start
out in the reception where you left. The inn will store your items as long as
you have the gold to pay the rent.

See also: INN
#
GET TAKE
If you find something interesting on the ground, you may use 'get' to pick it
up. Example: "get greatsword". If you are in a hurry, or if you just feel very
greedy, you may type "get all". You can also use 'get' to extract objects from
containers. Example: "get dagger from bag".

See also: DROP PUT
#
PUT
For putting stuff in containers. Example: "Put the dagger in the bag".

See also: GET
#
EXAMINE
May give you some valuable information about an item.

See also: LOOK
#
WRITE
In order to write a note, you need a piece of blank paper (or similar), and
a pen of some sort. You can then type something like "write on the paper with
the pen", whereupon you'll be asked to type in your note at the keyboard.
#
NEWS
This command will show you the current edition of "the DikuMUD Herald", a
publication dedicated to news and useful information about this world. It's a
very good idea to check it out once in a while.
#
SLEEPING WAKE REST SIT STAND
For changing your position. If you feel weary, it's probably a good idea to sit
and rest for awhile; or maybe even take a nap. You may wake someone who
has been magically slept (as opposed to attacking them which gives you a
flag).
#
POUR
If you want to pour some liquid from one container to another.
#
GRAB
For getting a good grip on something; a torch, for example.

See also: WEAR, WIELD, REMOVE
#
FOLLOW
If you happen to be going in the same direction as someone else, why not simply
follow that person? For example: "Follow joe". If you are following someone
and you wish to stop doing that, then all you've got to do is follow yourself:
"follow <your name>".
#
FLEE
If you are in a fight and things are beginning to get a little uncomfortable
(maybe your are dying), just type 'flee', and presto! you are out of harm's way
- that is, IF there is a suitable exit nearby, and IF that exit doesn't simply
bring you from the ashes to the fire... but then, who wants to live forever?
#
IMPLEMENTOR
The most powerful beings in existence.
#
GUILD
The Guildhouse is the place where mortals may go to escape the troubles and
perils of a cruel world. Each guild is heavily guarded, so that only members
may enter the building. Guilds are also the places where people come to
learn and practice the skills of their trade.

See also: PRACTICE
#
INFO
Gives you some useful hints and information about the game.
#
WHERE
Tells you the location of a monster, a player or an object. Examples:

where torch
where dragon

Mortals can only "where" monsters or players, and only from their own
zone.

Immortals may type 'where' without arguments to see where everybody is.
#
LEVELS
Lists the levels of your class. 
#
BRIEF
Toggle "brief mode". When in brief mode, you don't see the descriptions of the
room you are in; only the name of the room, and the people and objects in
there. Unless you are very familiar with the area in which you travel, however,
it is not advisable to use this command. Frequently, you will find small, but
vital hints in the descriptions of the rooms: An extra peek at your
surroundings could mean the difference between life and death!

See also: COMPACT
#
!
Repeat the last command typed at the keyboard.
#
CONSIDER
Usage : consider <monster>
This command will compare your Level with the <monsters> level. You will then
receive a rough estimate, which is by no means exact. Consider does not take
hitpoints/special attacks/damage into accout.

Example:
  > consider fido
#
EXPERIENCE XP

Whenever you kill a monster or a player, you earn experience points. When
enough experience points are earned, you raise a level.
Things you should know about experience points:

  * When damaging a monster, you get experience points.

  * If you kill a monster of higher level than yourself, you get bonus
    experience points. If killing a monster of lower level you'll gain
    less experience points

We strongly disencourage killing of other players, but the choice is yours.

See Also: GROUP
#
GROUP
Usage : GROUP [player]

If you are a group member, then you will share experience points for killing
monsters equally among the group. Experience points will only be shared among
group members that are in the same location, at the time of the killing
blow. Sharing is regardless of wherther the group members have been
participating in the fight.

Group with no argument show a list of people with whom you are grouped.

To make a group, a "leader" must be selected. All members of the group
must then "follow" the leader using the follow command. The leader should
NOT follow anyone at all! The leader can now toggle group membership for
each player in the group, by using "group <player_name>". The leader
should remember to include himself in the group.

Example:

Quifael and Redferne wishes to group with Dragon.

Quifael : "follow dragon"
Redferne: "follow dragon"
(Dragon should be following no one but himself)
Dragon  : "group dragon"
Dragon  : "group redferne"
Dragon  : "group quifael"

Later when Dragon get upset at Quifael (because he is sleeping all the time)
he types : "Group Quifael" to kick Quifael out of the group.

See Also: XP EXPERIENCE
#
QUAFF POTION POTIONS

Use : Quaff <Potion>

Quaff is used to "drink" a (magical) potion.
#
RECITE SCROLL SCROLLS

Use : Recite <Scroll> [Target]

Is used to "read" a magical scroll. Target can be an object, character or
nothing (which may be yourself).
#
USE WAND STAFF STAFFS WANDS

Use : Use <Staff>
      Use <Wand> <Target>

Using staff's will automatically target everybody (or everything) in a
room, execpt yourself. Therefore staff's are naturally very powerful, and
yet may be very dangerous to use around other players.

Using wands require that you point it at a target, which can be eihter a
character or an object.

Both staff's and wand's must be HELD in the hand prior to use! (Use the
grab or hold commands). You must still supply the name of the staff or
wand to avoid confusion.
#
ARMOR

Usage       : cast 'armor' [self]
Accumulative: No
Duration    : 24 Hours

The Armor spell will improve your AC by 20.

See Also: AC
#
TELEPORT

Usage       : cast 'teleport' [self]
Accumulative: -
Duration    : Instant

Teleport (with error) will instantly transfer you to another location
in the world. This location is random, and thus there will always be
a risk of landing in a fatal location.

See Also: -
#
BLESS
Usage       : cast 'bless' <victim or object>
Accumulative: No
Duration    : 6 Hours, permanent for objects.

Bless on a victim will improve the victims saving throw versus spells
by 1, and furthermore improve the hitroll by 1.

Bless on an item currently has no defined action. It is only possible
to bless non-evil items, and the object blessed may weight no more
than five pounds per level of caster. 

See Also: -
#
BLINDNESS
Usage       : cast 'blindness' <victim>
Accumulative: No.
Duration    : 2 hours.

Blindness will blind a victim failing its saving throw.
A blinded person will have -4 penalty to both hitroll and AC.

See Also: AC
#
CLONE
Usage       : cast 'clone' <victim or object>
Accumulative: -
Duration    : Instantaneous

Due to the ever changing data-structures of DikuMUD, clone is not
yet ready.

Clone cast on a victim or object, will make a 'nearly' perfect copy.
Clone has its limitations.

See Also: -
#
"CONTROL WEATHER"
Usage       : cast 'control weather' ('cold' | 'warm' | 'wet' |
                                      'dry' | 'windy' | 'calm')
Accumulative: Yes
Duration    : 1 hour

By imagining a certain change in the weather, the caster is able
to influence the atmospheric conditions toward the state imagined.
Susceptibility to change will vary according to the initial conditions.

The spell lasts for one hour, during which no further attempts to
control the weather will be possible, since the magic becomes a part
of the atmosphere itself, resisting change.

See Also: -
#
"CREATE FOOD"
Usage       : cast 'create food'
Accumulative: -
Duration    : Instantaneous

This spell instantly creates an edible magic mushroom. The mushroom
will filling for the next (5+level) hours, up to a maximum of 24 hours.

See Also: -
#
"CREATE WATER"
Usage       : cast 'create water' <drink container>
Accumulative: No
Duration    : Instantaneous

Expect disaterous results if cast upon a drink container which contains
another liquid than water. Empty or water containers will be filled
depending on the level of the caster.

Double amout of water will be created if it is raining (or worse).

See Also: -
#
"CURE BLIND"
Usage       : cast 'cure blind' <victim>
Accumulative: No
Duration    : Instantaneous

This spell will cure a person blinded by the "blindness" spell, it
can not remove blindness caused by for example cursed items.

See Also: -
#
"CURE CRITIC"
Usage       : cast 'cure critic' <victim>
Accumulative: -
Duration    : Instantaneous

This spell cures 3d8+3 hitpoints of damage.

See Also: -
#
"CURE LIGHT"
Usage       : cast 'cure light' <victim>
Accumulative: -
Duration    : Instantaneous

This spell cures 1d8 hitpoints of damage.

See Also: -
#
CURSE
Usage       : cast 'curse' (victim | object)
Accumulative: No
Duration    : 7 Days, permanent on objects.

Curse cast on a person that fails the saving throw, will reduce the
hitroll by one, and reduce the saving throw versus paralysation by
one. 

See Also: -
#
"DETECT EVIL"
Usage       : cast 'detect evil' [self]
Accumulative: No
Duration    : 5 hours per level

Detect evil will enabel you to see the red aura surrounding evil
persons and items.

See Also: -
#
"DETECT INVISIBILITY"
Usage       : cast 'detect invisibility' [self]
Accumulative: No
Duration    : 5 hours per level

This spell enabels you to see invisible items and players.

See Also: -
#
"DETECT MAGIC"
Usage       : cast 'detect magic' [self]
Accumulative: No
Duration    : 5 hours per level

This spell will let you see the magical aura surrounding magical
objects.

See Also: -
#
"DETECT POISON"
Usage       : cast 'detect poison' (victim | food | drink)
Accumulative: No
Duration    : Instantaneous

Cast on food or drinks (drink containers) you will be able to
sense if it is poisoned.

Cast on a person you will be abel to see if that person is
poisoned.

See Also: -
#
"ENCHANT WEAPON"
Usage       : cast 'enchant weapon' <weapon>
Accumulative: No
Duration    : Permanent

This spell will enchant non-magical (non-modifying) weapons only.
By non-modifying weapons we refer to weapons that might alter any
ability such as for example damage. The only way to know if a weapon
is suitabel for enchantment is to fully identify it.

The enchantment will modify the weapon as:

Level    Hit Roll    Damage

 0..17     +1         +1
18..19     +2         +1
20+        +2         +2

See Also: -
#
HEAL
Usage       : cast 'heal' <victim>
Accumulative: No
Duration    : Instantaneous

Heal will heal all the hitpoints from a person, execpt 1d4 points.
Maximum 100 points can be healed. A victim who is blinded will also
be cured by the heal spell.

See Also: "Cure Blindness"
#
INVISIBILITY
Usage       : cast 'invisibility' <victim | object>
Accumulative: No
Duration    : 24 hours, permanent on objects.

Self Explanatory.
Attacking while invisible will immediately break the spell.

See Also: "detect invisibility"
#
"LOCATE OBJECT"
Usage       : cast 'locate object' <object>
Accumulative: -
Duration    : Instantaneous

If possible you will know exactly where an object is, or the
name of the person using it. If more than one object by the
same name exists, you will get a listing of several objects.
The maximum number of objects you can simultaneously locate is
your level divided by 2.

See Also: -
#
POISON
Usage       : cast 'poison' <victim | food | drink>
Accumulative: Yes on persons.
Duration    : 2*level hours, or permanent on food and drinks.

Casting poison on food or drink (containers) will poison it.
Eating poisoned food/drinks will poison the person eating or
drinking.

A person who is poisoned will suffer 2 points of damage every
hour, and gain less points than usual.

See Also: "detect poison" or "remove poison"
#
"PROTECTION FROM EVIL"
Usage       : cast 'protection from evil' [self]
Accumulative: No
Duration    : 24 hours

This spell will prevent aggressive creatures less than the level of the
subject from attacking first in a battle, and also increase the effective
armor class of the subject when evil creatures are attempting to hit.

See Also: -
#
"REMOVE CURSE"
Usage       : cast 'remove curse' <person | object>
Accumulative: No
Duration    : Instantaneous

Will remove a curse on carried objects or any persons in the room.

See Also: -
#
"REMOVE POISON"
Usage       : cast 'remove poison' <victim | food | drink> 
Accumulative: No
Duration    : Instantaneous

Will remove poison.

See Also: Poison
#
SANCTUARY
Usage       : cast 'sanctuary' [self]
Accumulative: No
Duration    : 3 hours

When protected by sanctuary you can never receive more that 18 damage
points in one strike.

See Also: -
#
SLEEP
Usage       : cast 'sleep' <person>
Accumulative: Yes (duration)
Duration    : 4 hours + one hour per level

If failing saving throw versus spell, the person will fall asleep.
A person who is affected by sleep can only be awakened if attacked.

See Also: -
#
STRENGTH
Usage       : cast 'strength' <victim>
Accumulative: Yes (strength)
Duration    : Level hours

A person will gain 1 strength point per spell (2 points if level of
caster is greater than 18). Maximum strength is 18/100.

See Also: -
#
VENTRILOQUATE
Usage       : cast 'ventriloquate' <victim | object> <text>
Accumulative: -
Duration    : Instantaneous

For all people in the same room as the caster that fail a saving
throw, the spell will make the object or victim appear to say the
text written. People saving will only notice that someone tired
to make it sound that way, not who.

Example:

> cast 'vent' unclesam I've got 921,923 coins, don't even consider killing me.

See Also: -
#
"WORD OF RECALL"
Usage       : cast 'word of recall' 
Accumulative: -
Duration    : Instantaneous

The caster will be transferred back to his sancturay (presently
the Temple of Midgaard).

See Also: -
#
SUMMON
Usage       : cast 'summon' <victim>
Accumulative: -
Duration    : Instantaneous

Will summon a person of the name spoken. It is not possible to
summon someone of three or more levels above yourself.
If you attempt to summon a monster,it will get a saving throw.

See Also: -
#
"CHARM PERSON"
Usage       : cast 'charm person' <victim>
Accumulative: No
Duration    : (432/Itelligence points of person) hours

Is is not possible to charm anyone that is already charmed, if
you're charmed yourself, or if the person is higher level than
yourself. The person will get a saving throw versus "paralysation".

A charmed person will follow you, and not be abel to attack you, you
can order charmed person using the order command.

See Also: FOLLOW ORDER
#
"SENSE LIFE"
Usage       : cast 'sense life' [self]
Accumulative: No
Duration    : 5 hours per level

This spell will enable you to sense hidden life forms in a room.
Invisible persons are also considered hidden.

See Also: HIDE
#
"MAGIC MISSILE"
Usage       : cast 'magic missile' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 1 magic user.
Save        : Versus spell for half damage.

This is the least powerful offensive magic user spell.

See Also: 
#
"CHILL TOUCH"
Usage       : cast 'chill touch' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 3 magic user.
Save        : Versus spell for half damage.

This spell is more powerful than the magic missile spell.
A victim failing its saving throw will get its strength
reduced by one.

See Also: MAGIC MISSILE
#
"BURNING HANDS"
Usage       : cast 'burning hands' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 5 magic user.
Save        : Versus spell for half damage.

This spell is more powerful than the chill touch spell.

See Also: CHILL TOUCH
#
"SHOCKING GRASP"
Usage       : cast 'shocking grasp' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 7 magic user.
Save        : Versus spell for half damage.

This spell is more powerful than the burning hands spell.

See Also: BURNING HANDS
#
"LIGHTNING BOLT"
Usage       : cast 'lightning bolt' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 9 magic user.
Save        : Versus spell for half damage.

This spell is more powerful than the shocking grasp spell.

See Also: SHOCKING GRASP
#
"COLOR SPRAY"
Usage       : cast 'color spray' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 11 magic user.
Save        : Versus spell for half damage.

This spell is more powerful than the lightning bolt spell.

See Also: LIGHTNING BOLT
#
"ENERGY DRAIN"
Usage       : cast 'energy drain' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 13 magic user.
Save        : Versus spell for half damage.

This spell does not give much damage, but victims failing their
saving throws will loose up to 40,000 XP points. You will gain
a quarter of this XP.

Beware that this spell is evil.

See Also: -
#
FIREBALL
Usage       : cast 'fireball' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 15 magic user.
Save        : Versus spell for half damage.

This spell is the most powerful spell a magic user can cast.

See Also: COLOR SPRAY
#
EARTHQUAKE
Usage       : cast 'earthquake'
Accumulative: -
Duration    : Instantaneous
Level       : Level 7 cleric.
Save        : -

This spell will damage everybody except the caster by
1d8+level_of_caster hitpoints.

See Also: -
#
"DISPEL EVIL"
Usage       : cast 'dispel evil' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 10 cleric.
Save        : Special

This spell will only affect evil creatures. The spell will inflict
(caster_level)d4 damage points, saving throw versus half damage.

Be warned that this spell has a tendency to turn on the caster,
should the caster be evil.

See Also: -
#
"CALL LIGHTNING"
Usage       : cast 'call lightning' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 12 cleric.
Save        : Versus spell for half damage.

This spell will use the "force of nature" to make a lightning
strike the victim. It is therefore only possible to call lightning
outside, and it has to be raining (or worse).

The lightning will inflict (level)d8 points of damage, up to a
maximum of 15d8 damage points.

See Also: WEATHER and CONTROL WEATHER
#
HARM
Usage       : cast 'harm' <victim>
Accumulative: -
Duration    : Instantaneous
Level       : Level 15 cleric.
Save        : Versus spell for half damage.

This spell removes all but 1d4 hitpoints from the victim. The
maximum number of damage points are related to th level of the
caster. It is not possible to kill using this spell (but almost).

The caster needs to touch the victim for the spell to take effect.

See Also: -
#
HELP

Following help is available:

HELP help       - This text.
HELP            - List the available commands.

Help searches for a partial match of the entered word, including any
spaces that may follow the word.

Example:
 > 'help magic mis'
    will find the help text for the magic missile spell.

 > 'help mag '
   will not match anything.

 > 'help mag'
   will match 'magic user' or 'magic missile' depending on first
   occurence in the help file.

See Also: - HELP, RECURSION
#
RECURSION

   To occur or appear again, especially after an interval.

See Also: - RECURSION
#
SPELL SPELLS

           Magic User               Cleric

           (1) Magic Missile        (1) Armor
           (1) Ventriloquate        (1) Cure Light

           (2) Detect Magic         (2) Create Water
           (2) Detect Invisible     (2) Detect Poison

           (3) Chill Touch          (3) Create Food
           (3) -                    (3) Detect Magic

           (4) Invisibility         (4) Cure Blind
           (4) -                    (4) Detect Evil

           (5) Burning Hands        (5) Bless
           (5) Armor                (5) Detect Invisible

           (6) Locate Object        (6) Blindness
           (6) -                    (6) Protection from Evil

           (7) Shocking Grasp       (7) Earthquake
           (7) Strength             (7) Sense Life

           (8) Blindness            (8) Summon
           (8) Teleport with Error  (8) Poison

           (9) Lightning Bolt       (9) Cure Critic
           (9) -                    (9) Remove Poison

          (10) Control Weather    
          (10) -                   (10) Dispel Evil

          (11) Color Spray         (11) Word of Recall
          (11) -                   (11) -

          (12) Enchant Weapon      (12) Call Lightning
          (12) Curse               (12) Remove Curse

          (13) Energy Drain        (13) Control Weather
          (13) -                   (13) Sanctuary

          (14) Sleep               (14) Heal
          (14) Charm Person        (14) -

          (15) Clone               (15) Harm
          (15) Fireball            (15) -
#
ADVANCE
To advance a player to a level higher than his present. Default is to advance
him one level. A level 0 player (Man/Woman) is always only advanced by one
level.
#
WIZHELP
List the privileged commands available to you. Can only be used by immortals.
#
NOSHOUT
Prevents you from (or allows you to) hearing shouts, if used with no arguments.
Can be used with the name of a player, to prevent him/her from hearing shouts,
as well as from shouting, provided you are a powerful enough immortal.
#
RESTORE
If used on a mortal, this command will reset that players mana and hit points.
If used on an Immortal various values will be reset to their proper values.
#
LINK

A lot of players have problems with their links to the game. This could be
very dangerous to your healt in the middle of a combat. But we have worked
out a solution. There are two cases:

  I.If your link is broken, you will automatically attempt to flee each
    time someone attempts to hit you. If you manage to flee, then you
    will be saved by divine forces, and put in a safe place until you
    reconnect to the game.

 II.If your link jams (freezes) you got a problem. The only solution we
    can give, is that you break your link as quickly as possible. By
    breaking the link you can hope that the above procedure is initiated.
    Also, setting your WIMPY level will make you flee even when your
    commands cannot get through.
#
COMPACT
If you have a small display you might want to use this command. It turns off
(or on) the extra newline after output to your screen.

See also: BRIEF
#
SETSTAT
SETSTAT <victim> <field> <value>
field is one of [mana, mp, hp, exp, gold, dex, con, str, add, wis, int].
This modifies a PC's stats.  The mp, hp, and mana will change the 
maximum value for that PC.
#
WIZNET
WIZNET <text> delivers a message to all of the gods.
#
WIZINVIS
Makes you invisible to everyone except a god of equal or higher level.
#
HOLYLITE
Holylite lets you see in the dark without being seen.
#
POOFIN
POOFIN <text> sets up the message for when you "goto" a room.
This replaces the default "ear-splitting bang" message that
we are used to seeing.  To get the default back, just type
poofin with no argument.  This message must be reset every time
you log in.
#
POOFOUT
Same as poofin, except it is the message seen by people in the
room you are leaving when you do a "goto". 
#
WIMPY
Setting this mode makes you flee automatically when you are too 
low on hit points while fighting.

Wimpy now accepts an argument of what level of hit points should
cause an attempt to flee.
#
DISPLAY
DISPLAY has these options:
   ALL   -- displays hits, moves, and mana
   HP    -- toggle display of hit points
   MOVE  -- toggle display of movement
   MANA  -- toggle display of mana
   NONE  -- turn off display
#
'
The apostrophe is short for SAY.
#
:
The colon is short for EMOTE.
#
LWHO
LWHO is the local who command which only displays people
in your zone. This is the default action for the WHERE
command with no arguments.
#
ARENA

The arena is a special combat zone where players may do combat with
one another.  There are two teams, the RED team and the BLUE team.
Each team has a captain who leads the battle.  The goal is to kill
the opposing team while at the same time protecting your own
team mates.  The battle is over when a team is defeated.

It costs a certain amount of gold to do combat depending on your
level.  No immortals can play, obviously.  You neither gain nor
lose experience in the arena.  If you should happen to die, your
gold and equipment remain with you as you are recalled back to the
Temple.  Certain commands are available for each team member to 
effectively communicate with his officers and team members in the
field:
   WHERE -- shows where friends and foes are.
#
SAFE

A safe area is a place where you cannot be attacked by non-magical means by
another player.  Currently, the reception, the Temple of Midgaard, and the
paths leading to the arena are SAFE areas.  This only applies to players,
not non-playing-characters.
#
LAWS RULES POLICY SLAYER

Copper's LAWS

0. Player killing is tolerated.

1. You get a thief flag if you're caught stealing (a failed attempt) a
   player character (except in the arena).

2. You get a killer flag if you attack another player (except in the 
   arena).

3. Players with a thief or killer flag are fair game. That means you can
   safely attack them without getting a flag yourself.

4. If you "accidentally" get a flag, you may ask a god (23rd level or
   above) to pardon you (at his/her discretion). It is often necessary
   to get your victim to pardon you first.

5. A first level player cannot attack another player, nor can any player
   attack a first level player, except in the arena.

6. Players should settle their own disputes. Talking to a god should be
   a last resort as gods abide by the non-interference policy.
   (The arena is a good place to let off steam.)

These laws are subject to change at any time without warning especially
as we're adding more and more features to the game or as new
situations arise. If you have a problem with excessing killing, talk
to a god. Like these laws? Hate them? Leave suggestions.
#
MULTICLASS DUALCLASS

WARNING: Understand everything before attempting multiclassing.

Rules to become multiclass:
0. Read the rules until you understand them.
1. You must be at least 5th level to multiclass...
2. You will need to pay a LARGE sum of money (nonrefundable).
3. You will need comparable experience to your current level.
4. You need to find out how and where to multiclass (see hint below).

Once you've changed:
0. You will be left with 1 experience and be level 1 of your new class.
1. You will retain all warrior/thief abilities if you were that class.
2. If you were a spell caster, you will be able to cast a spell from
   the previous class ONLY if you've attained the old spell's level in
   your new class.
3. You will gain hit points at 1/2 the normal rate each time you advance.
4. You will gain experience at 1/3 the normal rate also.

SO... you weigh the advantages and disadvantages before you make the
fateful decision... as there's no turning back.

Here's a hint (ain't it creative?):

Where heaven and earth meet,
the paradox of death is complete.
Don't be blinded by colors,
and make proud your mother.

       -the Copper Crue
#
ATMS BANK

Copper ATMs:

The new ATMs are here. They automagically sense who you are, so no
ATM card is necessary (some kind of new-fangled fingerID technology).
Banks are too unsafe, so the Mayor has opted for ATM technology.
At an ATM site, you may type:
    BALANCE 
    DEPOSIT <number>
    WITHDRAW <number>

#
IMMORTALS IMMORTALITY 21

Immortals are people who have reached level 21. They should be respected
for having met and overcome the challenges of Copper DikuMud.

However, there are certain rules they must abide by:

0. They must not interfere with or hinder mortals.
1. That means no STAT'ing players or objects for mortals.
2. NO killing for mortals. Immortals cannot give away objects or equipment.
2. NO reimbursement for death traps or death, PERIOD.
3. NO experience reimbursement, PERIOD.
4. Breaking any of these rules subject the immortal to immediately demotion.

To advance to a higher level, immortals can request a copy of the doc files
detailing area creation, and build new areas for Copper.

Level 22's and above can do limited reimbursements for link problems
at their discretion.

Nobody likes rules, but we need them to keep the game fun and interesting.
#
DOCS DOCUMENTATION
The following docs are available:

 DOC_ACTIONS
 DOC_COMBAT
 DOC_COMM1
 DOC_COMM2
 DOC_DATABASE1
 DOC_DATABASE2
 DOC_DATABASE3
 DOC_DBSUP1
 DOC_DBSUP2
 DOC_DBSUP3
 DOC_DBSUP4
 DOC_DBSUP5
 DOC_DBSUP6
 DOC_DBSUP7
 DOC_DEFS
 DOC_DEFS
 DOC_DEFS
 DOC_DEFS
 DOC_HANDLER
 DOC_INTERPRETER
 DOC_LEVELS
 DOC_LICENSE
 DOC_LOOK
 DOC_MACRO
 DOC_NEWSTRUCT
 DOC_RUNNING
 DOC_SHOPS
 DOC_SKILLS
 DOC_SPELL_INFO
 DOC_SPELLS
 DOC_TIME
 DOC_UPDATE
 DOC_VALUES

 SAMPLE_WLD
 SAMPLE_ZON
 SAMPLE_MOB
 SAMPLE_OBJ
 SAMPLE_SHP

To read them, just type HELP DOC_ACTIONS, etc.
NOTE: Whenever you see '<pound-sign>', replace that with #. This was
 necessary due to the quirky nature of help.
#
DOC_ACTIONS

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */


           --- On the handling facilities for 'social actions'---


A general system exists to handle the 'social' commands, ie. commands that
have no game-related purpose save to convey emotions between players. These
are handled by the procedure

	void do_action(struct char_data *ch, char *argument, int cmd);

This procedure reacts in accordance with the contents of lib/actions, which
is a text file with information arranged after the following format:

--------------------------------------------
<command number> <hide-flag> <minimum position of victim>
<messg to character if no argument>
<messg to others if no arg>                
<messg to char if victim found>           <---If this field is empty,
<messg to others if victim found>          <- 
<messg to victim>                            | then these fields must be
<messg to char if victim not found>          | skipped, and the action will
<messg to char if vict is char>              | ignore arguments.
<messg to others if vict is char>          <-

<command number> <hide-flag> <minimum position of victim>
.
.
.
.
.


-1
-------------------------------------------------

A message must be contained in one line.

The hide-flag, if nonzero, makes the procedure hide the action from OTHERS,
if they cannot see the character. The action won't be hidden from the VICTIM,
even if he/she cannot see the character (the character's name will, of course,
be replaced with "someone").

Where it makes sense to do so, text fields may be left empty. This is done by
putting a '#' in the first column on the line. 
   This is permissible for the following fields:

a: messg to others if no arg
b: messg to others if victim found
c: messg to others if vict is char

NOTE again that if the field _messg to char if victim found_ is empty, then
the following fields must be omitted entirely (not even the '~'), and the
action will ignore any arguments supplied.

The procedure sends the text strings through act(), and they may contain
control codes (see the documentation for act() in comm.doc. Note that not all
of act()'s control codes may be used.

In order to improve execution speed, no tests are made on the consistency of
the usage of these codes. Hence, grave disorder may be the result if, say,
the code '$N' occurs in a text field that doesn't naturally refer to a victim;
like _messg to others if no arg_. 
#
DOC_COMBAT

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

HIT:

(weapon wielded)

hit_roll = tohit(weapon)D6 + (str/2) - (weight(weapon)-(str/10))
                                                  /*make hit roll     */
victim  |
  AC    |  9  8  7  6  5  4  3  2  1  0 -1 -2 -3 -4 -5 -6 -7 -8 -9
hit_roll| 
 needed | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

if hit : dam_roll = todam(weapon)D6 + (2Dstr/2)   /*damage on victim  */

------------------------------------------------------------------------
SPELL:

check mana && success(spell)>0%
  
  success_roll = 2*levelDsuccess(spell)           /*make success roll */ 
  
  victim_roll = 1D20                              /*make saving roll  */
   
  if ((success_roll > 100) && (victim_roll<victim_saving)) then
    
    dam_roll = todam(spell) + (2Dint)             /*damage on victim  */ 

------------------------------------------------------------------------
WAND

check charges

  if (magic-u/cleric): 

    success_roll = 2*levelDsuccess(spell)         /*make success roll */

  else

    success_roll = levelDsuccess(spell)           /*make success roll */

  if ((success_roll > 100) && (victim_roll<victim_saving)) then

    dam_roll=todam(spell) + (2D20) (if dam_spell) /*damage on victim  */

------------------------------------------------------------------------
STAFF

check charges

  if (magic-u/cleric): simple non-char effect 

  else: none

------------------------------------------------------------------------
FIRE

(fireweapon wielded,missiles hold)

hit_roll = tohit(weapon) + tohit(missile) + 1d20 + (dex/2) - distance
                                                  /*make hit roll    */
victim  |
  AC    |  9  8  7  6  5  4  3  2  1  0 -1 -2 -3 -4 -5 -6 -7 -8 -9
hit_roll|
 needed | 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

if hit : dam_roll = todam(missile) + todam(waepon) + (2Ddex)
                                                  /*damage on victim  */ 

* Distance : 1-5
------------------------------------------------------------------------
SCROLL

(croll hold)

check read magic spell

  simple non violent action

------------------------------------------------------------------------
MAKE A CHAR:

1) abiliti_roll = 3D6
2) point_roll   = 2d6 * 10
3) get char_class = [magic-user,cleric,thief,warrior]
   set prime_reqi = [   int    , wis  , dex ,  str  ]
4) all abilities other than dex and prime_requi 
   counts downto 9 and prime counts up
5) roll age (15-25)
6) get sex
7) inteligence check :
   3-4  : cannot read or write, only speaks short words
   5-6  : cannot read or write
   7-11 : normal
   12-16: +1 tounge
   17-18: +2 tounge
   (theives spek all tounges)
8) get standard class equipment
#
DOC_COMM1

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

Descriptions of the message-to-character routines of comm.c



void send_to_char(char *messg, struct char_data *ch)
Places messg in the output queue for ch, for later sending.

void send_to_all(char *messg)
Sends a message to all players.

void send_to_except(char *messg, struct char_data *ch)
Sends to all players, except the one pointed to by ch.

void send_to_room(char *messg, int room)
Sends messg to all players in the room.

void send_to_room_except(char *messg, int room, struct char_data *ch)
Send to all in room, with the exception of ch.


The following routine takes the place of all the old perform-routines. It is
to gradually replace these in the old code, and is to be used exclusively in
all additions.


FUNCTION ACT --- Process and send string to characters in a room.

SYNOPSIS

<pound-sign>include "comm.h"

act(string, hide_invisible, ch, obj, vict_obj, type)

char *string;                  /* the string to send                     */
int hide_invisible,            /* hide the action if vict can't see us?  */
    type;                      /* who gets the string                    */ 
struct char_data *ch;          /* the 'performing' character             */
struct obj_data *obj;          /* an object                              */
void *vict_obj;                /* an object OR a char OR an ascii string */


DESCRIPTION

This function is used to send a string to one or more characters in a room. The
string may contain certain control characters which are expanded before the
string is sent.

Obj and vict_obj are ignored if no reference is made to them (via CONTROL
CHARACTERS), and if type (see below) is set to TO_ROOM. Thus, null-pointers
may be supplied in this case. Ch should always be defined. If String is a
null-pointer or if string points to a null-character, nothing will be sent.

When the string has been parsed, it is capitalized and a newline is added.

   CONTROL CHARACTERS

Each control character is preceded by a '$'.

  $n - Write name, short description, or "someone", for ch, depending on
       whether ch is a PC, a NPC, or an invisible PC/NPC.

  $N - Like $n, except insert the text for vict_obj. NOTE: vict_obj must
       point to an object of type struct char_data.

  $m - "him", "her", or "it", depending on the gender of ch.

  $M - Like $m, for vict_obj. NOTE: vict_obj must be a pointer of type
       struct char_data.

  $s - "his", "her", or "it", depending on the gender of ch.

  $S - Like $s, for vict_obj.

  $e - "he", "she", "it", depending on the gender of ch.

  $E - Like $e, for vict_obj.
#
DOC_COMM2

  $o - Name or "something" for obj, depending on visibility.

  $O - Like $o, for vict_obj. NOTE: vict_obj must be a pointer of type
       struct obj_data.

  $p - Short description or "something" for obj.

  $P - Like $p for vict_obj.

  $a - "an" or "a", depending on the first character of obj's name.

  $A - Like $a, for vict_obj.

  $T - Prints the string pointed to by vict_obj.

  $F - Processes the string pointed to by vict_obj with fname() prior to
       printing.

  $$ - Print the character '$'.

    HIDE_INVISIBLE

If this parameter is nonzero, the action will be hidden to those who are
unable to see ch.

   TYPE

This value determines who the string is sent to. It may take one of four
values (the macros are defined in comm.h).

TO_ROOM     - Send the string to everybody in the room, except ch.
TO_VICT     - Send the string to the character (!) pointed to by vict_obj.
TO_NOTVICT  - Send the string to everybody in the room except ch and vict_obj.
TO_CHAR     - Send the string to the ch.


EXAMPLES

act("$n smiles happily.", TRUE, ch, 0, 0, TO_ROOM);

(eg: Rainbird smiles happily.)

act("You kiss $M.", FALSE, ch, 0, vict, TO_CHAR);

(eg: You kiss her.)

act("$n gives $p to $N.", TRUE, ch, obj, vict, TO_NOTVICT);

(eg: Dave gives a small sword to the giant.)

act("$n gives you $p.", FALSE, ch, obj, vict, TO_VICT);

(eg: Dave gives you a small sword.)

act("$n puts $p in $s $O.", TRUE, ch, obj1, obj2, TO_ROOM);

(eg: Jones puts a small sword in his sack.)
#
DOC_DATABASE1

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

                      DATABASE DOCUMENTATION
                          "database.doc"


1. The world file:
==================

This file contains all the rooms, and is loaded once and for all at
boot-time. It follows the this format:

--------------------------------------------
<pound-sign><virtual number>
<name>~
<description>~
<zone nr>
<room_flags>
<sector_type>
{<direction fields and extra descriptions>}
'S'
<pound-sign><virtual number>

.
.
.

<pound-sign><arbitrary number (is ignored)>
$~

Explanation of fields:
----------------------

<Direction fields> follow this format:

D<exit number>
<general description>~
<keyword list>~
<Door flag> <key number> <to_room>

Extra descriptions
------------------

Format:

'E'
<blank separated keyword list>~
<description>~


-----
NOTE:

All the text fields above may be left blank, but the '~' should always be
there.

On the 'virtual' number:

Since the rooms for this game are expected to be written by several people,
we have made it possible to number the rooms freely. Thus, it is possible to,
say, number the rooms in zone 0 from 0 to 1000, the rooms in zone 1 from 1000
to 2000, and so on. Rooms can then be added to the room file without
upsetting the various references to rooms. In the reset command-tables, as well
as in the exits, references to a given room are made via the virtual number
rather than the array index. At boot-time, these references are substituted
with the actual array indices in order to improve the game-time execution
speed. In such places (ie the special routines for mobs/objs/rooms) where
this substitution cannot take place, a function 'real_room', with prototype

			int real_room(int virtual_number)

must be used. This functions performs a binary search on the array of rooms, 
looking for a room with a given virtual number. If found, the function
returns the index to this room; if not, the game is halted. 

Note: Since a binary search is used, the rooms MUST be sorted (in the
room-file) after their virtual number.

-----------------------------------------------------------------------------

2. Objects and monsters
=======================

The objects and mobiles are stored in two separate files. They are loaded
once at boot-time, and then each time their zone is reset, according to the
information stored in the ZONE-FILE.

The world is split up into a number of zones that are updated independently.
The exact nature of these updates are defined by the contents of the ZONE-FILE.


-----------------------------------------------------------------------------

2.1. The Monster file:
======================

The format of this file is as follows:


<pound-sign><virtual number>
<namelist>~
<short description>~
<long description>~
<description>~
<action flags> <affection flags> <alignment> <Detailed/Simple flag>

IF <Old/Simple flag> != 'S' {

<strength> <intelligence> <wisdom> <dexterity> <constitution>
<hit low> <hit high> <armour> <mana> <movement> <gold> <exp>
<position> <default> <sex> <class> <level> <age> <weight> <height>
<condition 0> <condition 1> <condition 2> 
<savingthrow 0> <savingthrow 1> <savingthrow 2> <savingthrow 3> <savingthrow 4>

} else { /* Simple monsters flag is 'S' */

<Level> <Thac0> <AC> <Hit Points (format is xdy+z)> <Damage (as HP)>
<Gold> <Exp>
<position> <default position> <sex>

}
<pound-sign><virtual number>

.
.
.
$~

<pound-sign><virtual number>
#
DOC_DATABASE2

-----------------------------------------------------------------------------

2.3. The object file:
=====================


The format is as follows:

<pound-sign><virtual number>
<namelist>~
<short description>~
<long description>~
<action description>~
<type flag> <extra flag> <wear flag>
<value 0> <value 1> <value 2> <value 3>
<weight> <value> <cost/day>
'E'
<keyword-list>~
<extra description>~
'E'
<keyword-list>~
<extra description>~
.
.
.
'E'
<keyword-list>~
<extra description>~
'A'
<location> <modifier>
.
.
'A'
<location> <modifier>
<pound-sign><virtual number>

.
.
.

<pound-sign><virtual number>
'$~'

-----------------------------------------------------------------------------

2.3. The zone-file
==================

The zone-file contains the following information for each zone:

a) The top room-number of the zone. A room belongs to a zone X if:

          zone[X-1].top < virtual_room_number <= zone[X]

for X > 0. Rooms belong to zone 0 if their number is between 0 and the
top of zone 0.

b) The LIFESPAN of the zone. When the age of the zone (measured in minutes
after last reset) reaches this number, the zone is queued for reset. The
zone is then reset as soon as possible (more or less), depending on the 
value of the RESET_MODE-variable.

c) The RESET_MODE. This may take on of three values:

  0: Don't reset the zone at all. In this case, the age of the zone is never
     updated, and it will never be queued for reset. Thus, the value of the
     lifespan-field is effectively ignored.

  1: Reset the zone as soon as it is deserted, ie as soon as there are no
     players located within the zone.

  2: Reset the zone no matter who or what is in it.

d) The COMMAND TABLE. This is a series of commands to execute at reset. The
   table is terminated by the pseudo-command 'S', and thus follows the 
   following format:

   <command>
   <command>

   .
   .
   .

   <command>
   'S'

   Each command consists of a letter, identifying the command-type, followed
   by three or four arguments. The first argument, common to all the commands,
   is called the 'if-flag'. If it is true (nonzero), the command is executed
   ONLY if the preceding command was executed. If it is false (zero), the
   command is executed anyway.

   The commands:

	M (load a mobile): 
           Format: 'M' <if-flag> <mobile nr> <max existing> <room nr>

	   mobile nr and room nr should be self-explanatory. The 'max
	   existing' parameter specifies the maximum permissible number of
	   existing units. In other words: If you only want one manifestation
	   of a given monster, you just specify the number '1'. If the max
	   number is about to be exceeded, the command won't be executed.

	O (load an object):
	   Format: 'O' <if-flag> <object nr> <max existing> <room nr>

      Load an object and place it in a room.	(NOT -1)

	G (give object to mobile):
	   Format: 'G' <if-flag> <object nr> <max existing>

      Loads an object, and gives it to the last monster referenced (ie. by the
      M-command).

	   Of course, this command doesn't make sense if a new mobile+object
	   pair has not just been created, which is where the if-flag comes
	   in handy.   :)

	E (object to equipment list of mobile)
		Format: 'E' <if-flag> <object nr> <max existing> <equipment position>

	 Loads object and places it in the Equipment list of the last monster
    referenced.

    Note that it is NOT necessary to precede this command with a 'G' command.
#
DOC_DATABASE3

    Equipment position is one of:
      WEAR_LIGHT      0
      WEAR_FINGER_R   1
      WEAR_FINGER_L   2
      WEAR_NECK_1     3
      WEAR_NECK_2     4
      WEAR_BODY       5
      WEAR_HEAD       6
      WEAR_LEGS       7
      WEAR_FEET       8
      WEAR_HANDS      9
      WEAR_ARMS      10
      WEAR_SHIELD    11
      WEAR_ABOUT     12
      WEAR_WAISTE    13
      WEAR_WRIST_R   14
      WEAR_WRIST_L   15
      WIELD          16
      HOLD           17


	P (put object in object):
	   Format: 'P' <if-flag> <object_nr1> <max existing> <object nr2>

		Loads object1 and places it in object2.

	D (set state of door)
		Format: 'D' <if-flag> <room nr> <exit nr> <state>

		State being one of:
		0: Open.
		1: Closed.
		2: Closed and locked.

	R (remove object from room)
     Format: 'R' <if-flag> <room_nr> <object_nr>


   More commands will probably be needed, and will be added as required.


Format of the zone-file:

---------------------------------------
<pound-sign><arbitrary number (ignored)>
<name>~
<top of zone>
<lifespan>
<reset mode>
<command>
<command>

.
.
.

<command>
'S'
<pound-sign><arbitrary number>

.
.
.

<pound-sign><arbitrary number>
$~







2.2. The monster file:
----------------------

The format of this file is as follows:


----------------------------------------------
<pound-sign><virtual number>
<namelist>~
<short description>~
<long description>~
<description>~
<action flags> <affection flags> <Detailed/Simple flag>

IF <Old/Simple flag> != 'S' {

<strength> <intelligence> <wisdom> <dexterity> <constitution>
<hit low> <hit high> <armour> <mana> <movement> <gold> <exp>
<position> <default> <sex> <class> <level> <age> <weight> <height>
<condition 0> <condition 1> <condition 2> 
<savingthrow 0> <savingthrow 1> <savingthrow 2> <savingthrow 3> <savingthrow 4>

} else { /* Simple monsters flag should be 'D' */

<Level> <Thac0> <AC> <Hit Points (format is xdy+z)> <Damage (as HP)>
<Gold> <Exp>
<position> <default position> <sex>

}
<pound-sign><virtual number>

.
.
.

<pound-sign><virtual number>
$~
----------------------------------------------

On the skill fields:

Format:
--------------
S<skill number>
<learned> <affected by> <duration> <recognize>
--------------

On the virtual numbers:

This number may be considered the 'label' of the mobile, for use in eg. the
zonefile (see also the text about the roomfile format). When the mobile is to
be referenced from within the code itself, the function real_mobile
(real_object for objects) can be used to find indices to the file-index tables
(this is only of use when writing special routines). These functions are
automatically called from read_object/read_mobile, depending on their 'type'
parameter (see db.doc).
#
DOC_DBSUP1

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

                   DATABASE SUPPLEMENTAL DOCUMENTATION
                            "dbsup.doc"


World File field description:
=============================

Main structure notes:
---------------------

<pound-sign><virtual number> is:
  A number for the given room. No two rooms may have the same number.
  The <virtual number> must always increase when browsing down the 
  world file (but increments can be larger than one).

<name>~<NL>:
  This name is the "title" of the room. This title is also used in special
  procedures like:
    "exits"
    "brief mode"

<description>~<NL>:
  This is the general description of the room.

<zone nr> is:
  The number of the zone in which this room is located. This number is used
  for resetting zones and monster zone movement. See the zone file.

<room_flags> are:
  A bitvector consisting of the room conditions as:

  DARK           1  Light must be used to see anything.
  DEATH          2  A player 'dies' (no xp lost) when entering.
                    It is a good idea to:
                     *Have these rooms light, because then EXITS will show
                      the room title, for example "In Boiling Water".
                     *Make exits to all rooms from which one can enter the
                      death_room, then the "death cry" will be heard by
                      other members of the group considering following...
  NO_MOB         4  No monsters may walk around in here
  INDOORS        8  This is inside (a house,cave or dungeon for example)
  LAWFULL       16  ??? 
  NEUTRAL       32  ???
  CHAOTIC       64  ???
  NO_MAGIC     128  Not implemented.
  TUNNEL       256  ???
  PRIVATE      512  It is impossible to teleport to this room if it
                    already contains two characters.
                    Also the 'teleport' spell will never teleport a
                    player into this room.

??? means that the flag isn't used yet (and you Shouldn't use it either!)


<sector_type> is:
  This determines how many movement points are used when moving through
  a location of the type - use one of the numbers 0..7 (they are NOT the
  movement-points used - merely indexes to a lookup-table):

  SECT_INSIDE          0  Uses as if walking indoors
  SECT_CITY            1  Uses as if walking in a city
  SECT_FIELD           2  Uses as if walking in a field
  SECT_FOREST          3  Uses as if walking in a forest
  SECT_HILLS           4  Uses as if walking in hills
  SECT_MOUNTAIN        5  Uses as if climbing in mountains
  SECT_WATER_SWIM      6  Uses as if swimming
  SECT_WATER_NOSWIM    7  Impossible to swim water - requires a boat


Direction fields:
-----------------

<Exit number> is one of:
  0 = North
  1 = East
  2 = South
  3 = West
  4 = Up
  5 = Down

<general description><NL>~<NL>:
  What a player will see if he types 'look <direction>'

<keyword list>~<NL>:
  used for commands like 'open', 'close', etc. should be 'door' for ordinary
  doors. Example: An exit from a given room leads through a cupboard. The
  keyword list for this exit might look like this:

  "cupboard door~"


<Door flag> [NL]:

  If <Door Flag> is 1, the exit can be locked/unlocked/opened/closed/picked.
  If it is 2, the exit can only be locked/unlocked/opened/closed.
  If it is 0, these commands won't work. (The exit can still be closed at
#
DOC_DBSUP2

  reset, however; maybe to be opened by some special routine, like a concealed
  handle).

  The state of the doors after reset may be controlled by a command in the
  reset-command table (see the zone file). The initial state of a door is
  open.

<Key Number> [NL]:
  The number of the object which can unlock/lock the door (in the direction
  given). If a player carries/holds this object, he can lock/unlock.
  <Key Number> == -1 means no keyhole. If <Door flag> is 0, the value of this
  field is ignored.

<to_room> <NL>:
  The virtual number of the room to which the exit leads. If this number is
  -1 (NOWHERE), the exit doesn't lead anywhere. This might be useful for
  adding an exit-description in a direction which doesn't actually lead
  anywhere.

** Note about doors. You must make a door in both rooms that the door
                     is set between.

Extra descriptions:
-------------------

<blank separated keyword list>~<NL> is:
  A list of the keywords that will allow the extra description to be
  displayed. The keywords must must be seperated by blanks.


<description><NL>~<NL>:
  The description that is show when a player types 'look at <keyword>'
  and keyword matches one of the above.


Example of a room entry is the database:
----------------------------------------

<pound-sign>100
The Lego temple~
   You stand in a tiny, red temple; built entirely from Lego bricks. It is,
sadly, not a very interesting place, and perhaps you should leave through the
portal which leads south to a sunny garden.
~
1 12 0
D2
You see the grand portal of the Lego church. Beyond is an inviting garden.
~
portal grand~
1 2 107
E
portal~
The portal is high and arched, built out of lego bricks of the finest quality.
~
E
brick~
The bricks are all in bright different colours.
~
S
<pound-sign>101
.
.
.

Facts about this room is:
  Room number 100
  Zone number 1
	Room Flags  (8+4=12) INDOORS and NO_MOB
  Sector Type Inside (movement loss calc only)
  One exit (D2) to the south with 'look south' description
  Door Flag 1
  Key no.   2
  Leads to room 107
	Extra description for the portal and bricks.

-------------------------------------------------------------------------

Monster fields description:
===========================

<pound-sign><virtual number><NL> is:
  The monsters virtual number. Rules are same as for room virtual numbers.

<namelist><!NL>~<NL>
  The space-separated name alias list.

<short description><!NL>~<NL>
  This string will be displayed when the monster take action, for example
  if it is "The Beastly Fido", and fido leaves south the message will be
  "The Beastly Fido leaves south."

<long description><NL>~<NL>
  This description is displayed when the monster is in it's "default"
  position. When not in the default position, a message like:
  "<short description> is sleeping here." could be displayed.

<description><NL>~<NL>
  This will be displayed when a player looks at the monster.

<action flags>[NL]
#
DOC_DBSUP3


  This bitvector define how the monster behave.  The bits mean:

  ACT_SPEC         1  This means that there is a special programmed C
                      procedure connected to the monster. When this bit
                      is set the monster "function pointer" must be
                      assigned in the "spec_assign.c" file.

  ACT_SENTINEL     2  When this bit is set the monster will NOT
                      move around in the world.

  ACT_SCAVENGER    4  When this bit is set, monsters will pick up stuff
                      lying on the ground. It will pick up the most
                      expensive items first.

  ACT_ISNPC        8  RESERVED FOR INTERNAL USE

  ACT_NICE_THIEF  16  When this bit is set, a monster will not attack
                      a thief which has been caught in the act of 
                      stealing from this monster.

  ACT_AGGRESSIVE  32  When this bit is set, the monster will attack and
                      attempt to kill any player it can get it's claws on.
                      It will not attack players it can't see (for example
                      dark rooms or when player is invisible, unless the
                      monster can detect invisibility)

  ACT_STAY_ZONE   64  When this bit is set, the monster will never move
                      into another zone of the world (this is good for
                      keeping your monsters in your own adventure).

  ACT_WIMPY      128  When this bit is set, the monster will flee when it's
                      getting percentwise low on hitpoints.
                      If the monster is both aggressive and wimpy, then it
                      will only attack players that are NOT awake! (ie. also
                      suffering players).

<affection flags>[NL]

  This is a bitvector that indicates what the monster is affected by.
  Puff could for example be able to "detect invisible" or maybe
  "sanctuary" (1/2 damage). A lot of these bits are meant for players
  only (in a context with a spell), and should NOT be used when indicated.
  The bits are:

  AFF_BLIND             1         RESERVED PLAYERS
  AFF_INVISIBLE         2         The monster is invisible
  AFF_DETECT_EVIL       4         RESERVED PLAYERS
  AFF_DETECT_INVISIBLE  8         The monster can see invisible players
                                  (Especially good for aggressive npc's)
#
DOC_DBSUP4

  AFF_DETECT_MAGIC      16        RESERVED PLAYERS
  AFF_SENCE_LIFE        32        RESERVED PLAYERS
  AFF_HOLD              64        ??? DO NOT USE
  AFF_SANCTUARY         128       The monster has sanctuary (1/2 damage)
  AFF_GROUP             256       RESERVED PLAYERS
  AFF_CURSE             1024      ??? DO NOT USE
  AFF_FLAMING           2048      ??? DO NOT USE
  AFF_POISON            4096      RESERVED PLAYERS
  AFF_PROTECT_EVIL      8192      ??? DO NOT USE
  AFF_PARALYSIS         16384     ??? DO NOT USE
  AFF_MORDEN_SWORD      32768     ??? DO NOT USE
  AFF_FLAMING_SWORD     65536     ??? DO NOT USE
  AFF_SLEEP             131072    RESERVED PLAYERS
  AFF_DODGE             262144    ??? DO NOT USE
  AFF_SNEAK             524288    The message "The xxx leaves direction" will
                                  not be displayed when the monster moves
                                  out/in to a room.
  AFF_HIDE              1048576   The monster will be hidden, and can only
                                  be detected by a "sense life" spell
  AFF_FEAR              2097152   ??? DO NOT USE   
  AFF_CHARM             4194304   The monster will act as charmed when a
                                  "follow <player>" is entered. Note that
                                  players can't force monsters to follow
                                  them.
  AFF_FOLLOW            8388608   RESERVED PLAYERS


<Alignment Flag>[NL]

  This is the monsters alignment, read as:
  +1000 .. +350  Good Alignment
   +349 .. -349  Neutral Alignment
   -350 ..-1000 Evil Alignment

<Detailed/Simple flag><NL>

  This flag must be entered as a uppercase "S". S indicates that "Simple"
  monster data follow. Anything but an S will be interpreted as if
  "Detailed" monster data is to follow. We will NOT describe detailed
  monsters as they are VERY detailed.


<Level>
   This is the level of the monster. See "defs.doc" for guidelines when
   setting the level.

<THAC0>
   The monsters THAC0.
   See the file "defs.doc" for an explanation of armour vs. THAC0, and
   guidelines for THAC0.
#
DOC_DBSUP5

   THAC0 is an abbrevation for "To Hit Armour Class Zero".

<AC>
   The monsters armour class. See "defs.doc" for guidelines regarding
   armour.

<Hit Points (format is xdy+z)>
   This defines the number of hitpoints a given monster has. If this is
   entered into the file:

   ... ... 3d8+10 ...

   the monster will have 10 hitpoints plus the result of rolling 3 dice
   with 8 side, and adding their sum. All the numbers (even zero), the
   plus sign, and the letter 'd' MUST be entered!!! Example:

   ..... 1d6+0 ....


<Damage (as HP)><NL>
   This is the damage a monster will cause when it is using NO weapons
   (the Bare hand damage). The format is exacly like the one described
   for hit points. A thing to note about damage:
   The number after the plus sign, is the "strength bonus". This bonus
   will apply to any weapons used, and bare hands too. Example:

   ..... 1d4+10

   This monster will damage between 11 and 14 hitpoints each round. If the
   monster picks up and wields a tiny stick which give 1d2 damage, then the
   monster will now damage by : 1d2 + 10 points. 

<Gold>
   The amout of gold carried by the monster.

<Exp><NL>
   The experience this monster has. Follow guidelines in "defs.doc".

<position>
   This defines the monster's position when loaded into the game.
   A position is one of:

   POSITION_DEAD       0  DO NOT USE
   POSITION_MORTALLYW  1  DO NOT USE
   POSITION_INCAP      2  DO NOT USE
   POSITION_STUNNED    3  DO NOT USE
   POSITION_SLEEPING   4  The monster is sleeping.
   POSITION_RESTING    5  The monster is resting.
   POSITION_SITTING    6  The monster is sitting.
   POSITION_FIGHTING   7  DO NOT USE.
   POSITION_STANDING   8  The monster is standing.


<default position>
   This is the position into which the monster will return after
   a fight. This position also defines when the <long description>
   is displayed - see above.

<sex><NL>
   This is the monsters sex, on of:

   SEX_NEUTRAL   0
   SEX_MALE      1
   SEX_FEMALE    2

   No further explanation is needed (hopefully).


Object fields description:
==========================

<pound-sign><virtual number><NL>
   See rules for rooms above.

<namelist>~<NL>:
   Same as for monsters above.

<short description>~<NL>
   This string will be displayed when the object is used. For example
   if it is "a rubber raft", and a player drops it, then a message like:
   "Monthy drops a rubber raft."
   could be displayed.

<long description>~<NL>
   This description is displayed when the object is lying on the ground.
   For example, if it is "A furled umbrella lies here.~" then this message
   is displayed when the umbrella is lying on the ground.

<action description>~<NL>
   Do not use.

<type flag>[NL]
   This defines what kind of item you are defining, it can be one of:

   ITEM_LIGHT      1  Item is a light.
   ITEM_SCROLL     2  Not yet implemented
   ITEM_WAND       3  Not yet implemented
   ITEM_STAFF      4  Not yet implemented
   ITEM_WEAPON     5  Item is a weapon
   ITEM_FIREWEAPON 6  Not yet implemented
#
DOC_DBSUP6

   ITEM_MISSILE    7  Not yet implemented
   ITEM_TREASURE   8  Item is a treasure (not money)
   ITEM_ARMOR      9  Item is armour.
   ITEM_POTION    10  Not yet implemented
   ITEM_WORN      11  ???
   ITEM_OTHER     12  Item is other
   ITEM_TRASH     13  Item is trash
   ITEM_TRAP      14  Not yet implemented
   ITEM_CONTAINER 15  Item is a container
   ITEM_NOTE      16  Item is a note that can be written upon (with a pen)
   ITEM_DRINKCON  17  Item is a drink container, for example a bottle or
                      a barrel or a wine-skin.
                      A drinkcontainer whit contents must *always* have
                      two names: 1. The name of the drink, 2. the name
                      of the container, example:
                       tea cup~

   ITEM_KEY       18  Item is a key
   ITEM_FOOD      19  Item is food.
   ITEM_MONEY     20  Item is money.
   ITEM_PEN       21  Item is a pen.
   ITEM_BOAT      22  Item is a boat, which must be carried by a player if
                      the player wishes to enter NOSWIM room sector types.

<extra flag>[NL]
   This bitvector defines mostly special effects:

   ITEM_GLOW            1  The item is glowing.
   ITEM_HUM             2  The item is "humming"/"buzzing".
   ITEM_DARK            4  ???
   ITEM_LOCK            8  ???
   ITEM_EVIL           16  ???
   ITEM_INVISIBLE      32  Item is invisible.
   ITEM_MAGIC          64  Item will show a magical aura when 'detect magic'
                           is used.
   ITEM_NODROP        128  Item can not be dropped (cursed for example)
   ITEM_BLESS         256  Item is blessed.
   ITEM_ANTI_GOOD     512 /* not usable by good people    */
   ITEM_ANTI_EVIL    1024 /* not usable by evil people    */
   ITEM_ANTI_NEUTRAL 2048 /* not usable by neutral people */


<wear flag><NL>
   This bitvector defines if items can be taken, and if they can be worn:

   ITEM_TAKE              1 Item is takeable.
   ITEM_WEAR_FINGER       2 Can be worn on a finger (rings usually)
   ITEM_WEAR_NECK         4 Can be worn around neck.
   ITEM_WEAR_BODY         8 Can be worn on body.
   ITEM_WEAR_HEAD        16 Can be worn on head.
   ITEM_WEAR_LEGS        32 Can be worn on legs.
   ITEM_WEAR_FEET        64 Can be worn on feet
   ITEM_WEAR_HANDS      128 Can be worn on hands (gauntlets, etc)
   ITEM_WEAR_ARMS       256 Can be worn on arms.
   ITEM_WEAR_SHIELD     512 Can be used as a shield.
   ITEM_WEAR_ABOUT     1024 ???
   ITEM_WEAR_WAISTE    2048 Can be worn around the waiste (belt)
   ITEM_WEAR_WRIST     4096 Can be worn on wrist (bracelets)
   ITEM_WIELD          8192 Can be wielded and used as a weapon
   ITEM_HOLD          16384 Item can be held in a hand.
   ITEM_THROW         32768 Not yet implemented.
                            Item can be thrown.

<value 0> <value 1> <value 2> <value 3> <NL>
   These values are very central. They define the ability of items based on
   the items <Item Type>. These values are defined in "values.doc". Note that
   if you define an item as being anything but a weapon, you shouldn't set
   the 'wield' flag. Many similar obvious rules apply. Example of 4 values:

   If the <Item Type> == ITEM_CONTAINER then the values are interpeted as:

      Value[0]: Maximum weight the container can contain.
      Value[1]: Container flags:

        CLOSEABLE     - 1
        PICKPROOF     - 2
        CLOSED        - 4
        LOCKED        - 8

      Value[2]: The item-number of the object which can open the object.
                -1 means no lockability.
      Value[3]: Internal use for Corpses that must "rot".


<weight>[NL]
   The weight of the item in pounds.

<value>[NL]
   The value of the item if sold - see "defs.doc" for ideas on prices.

<cost/day><NL>
   The cost to store the item in the reception overnight.




Several extra descriptions or none at all may appear. They follow the room
format exactly.

'E'<NL>
#
DOC_DBSUP7

<keyword-list>~<NL>
   Exactly as in rooms.

<extra description><NL>~<NL>
   Exactly as in rooms.



Between zero and two "affect's" may be set on an item. The affects could
for example modify a characters strength, height etc. The affect only goes
into affect when the character wear, wield or hold the item. The affect
is removed when the character removes the items.

'A'<NL>
   When items are worn using wear/wield/grab/hold commands, the 'A' will
   allow the items to affect a characters various abilities. Currently
   a maximum of 2 'A' are allowed.

<location>[NL]
   <location> is one of the below numbers, indicating which ability
   will be changed.

   APPLY_NONE              0  DO NOT USE.
   APPLY_STR               1
   APPLY_DEX               2
   APPLY_INT               3
   APPLY_WIS               4
   APPLY_CON               5
   APPLY_SEX               6  DO NOT USE.
   APPLY_CLASS             7  DO NOT USE.
   APPLY_LEVEL             8  DO NOT USE.
   APPLY_AGE               9
   APPLY_CHAR_WEIGHT      10
   APPLY_CHAR_HEIGHT      11
   APPLY_MANA             12  DO NOT USE.
   APPLY_HIT              13  The MAXIMUM number of hitpoints.
   APPLY_MOVE             14  DO NOT USE.
   APPLY_GOLD             15  DO NOT USE.
   APPLY_EXP              16  DO NOT USE.
   APPLY_AC               17
   APPLY_ARMOR            17  Same as APPLY_AC
   APPLY_HITROLL          18  The bonus/penalty to hit the opponent.
   APPLY_DAMROLL          19  The bouns/penalty to damage the opponent.
   APPLY_SAVING_PARA      20  These five are saving throws.
   APPLY_SAVING_ROD       21
   APPLY_SAVING_PETRI     22
   APPLY_SAVING_BREATH    23
   APPLY_SAVING_SPELL     24  This is the most used saving throw.


<modifier><NL>

   The modifier is added to the APPLY_XXX ability of the character
   when he uses an item, and is subtracted when he stops using it.
   Take great care when using this. This is an example of an item of
   improve strength and armour class. Example:

     A
     1 2
     A
     17 -2

   This adds +2 to the strength, and adds -2 to the AC (thus improving it).
   No more 'A'ffects is allowed at this time.

-------------------------------------------------------------------------

Abbrevations:
=============

<contents> indicates that the contents MUST be entered.

[contents] indicates that the contents can OPTIONALLY be entered.

<NL> is Newline (return)

! This indicates "NOT" - for example <!NL> means NO newline (ei. it is
  forbidden to use newline here).
#
DOC_DEFS1

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

                   DIKUMUD DEFINITIONS AND STANDARDS TO OBEY
                                  "defs.doc"


PC's  ~ Players
NPC's ~ Non Players (Monsters)
<name> is used for short names
[x..y] is used to indicate min and max


PC's level [0..20], level [21..24] is special, not useable in gameplay.
NPC's level [0..30]

All PC's and NPC's have following abilities <ABIL>:

  Strength     <STR>
    <PC>  [3..18/100]
    <NPC> [0..25]

  Dexterity    <DEX>
    <PC>  [3..18]
    <NPC> [0..25]

  Intelligence <INT>
    <PC>  [3..18]
    <NPC> [0..25]

  Wisdom       <WIS>
    <PC>  [3..18]
    <NPC> [0..25]

  Constitution <CON>
    <PC>  [3..18]
    <NPC> [0..25]



All PC's must select one of four classes :

  Magic User <MU>
  Cleric     <CL>
  Thief      <TH>       
  Warrior    <WA>


Every PC class have a Primary ability (requisite) <PR> :

  <MU> <INT>
  <CL> <WIS>
  <TH> <DEX>
  <WA> <STR>


When creating a new <PC>, the <PC>'s <ABIL> are calculated as:

   NOTE: This is when being raised from level 0 to level 1!

   The size of the <ABIL> dice, is determined by rolling 4 1d6 dice,
   and adding the sum of the three largest dice.
   The <ABIL> is sorted and assigned a <PC> in descending order,
   depending on the class.

   <MU> == <INT> <WIS> <DEX> <STR> <CON>
   <CL> == <WIS> <INT> <STR> <DEX> <CON>
   <TH> == <DEX> <STR> <CON> <INT> <WIS>
   <WA> == <STR> <DEX> <CON> <WIS> <INT>


   <HP>   base is set as 10
   <MANA> is allways set to 100
   Assign 2d6*100 gold coins to player
   Set level as 1
   Set exp as 1
   Set theives abilities as basic.

   Call the "Advance Level" routines!


Hitpoints:
  <HP> ~ Hitpoints

  <PC>'s gain in the following range when advancing a level.
    <WA> [10..15]  Average (12.5)
    <TH> [7..13]   Average (10.0)
    <CL> [5..10]   Average  (7.5)
    <MA> [3..8]    Average  (5.5)


Advancing a level (<PC>'s only):
        <HP> is gained as above
        "Spells to learn" is increased by
          MIN(1, WIS_APPLY) for <WA> & <TH>
        else
          MIN(2, WIS_APPLY) for <MU> & <CL>

<NPC> <ABIL> follow <PC>'s <ABIL> up to level 20, with the
#
DOC_DEFS2

  exception that NPC may have 0 in abilities. Only unusual
  <NPC>'s are assigned abilities.

  <PR> may be in 18/00..100 for Warriors ONLY!

      
============================= MONSTER LOOKUP ==============================

This is general guidelines for creating monsters. This is when creating
"S"impel monsters. Detailed monsters require a great deal of care when
designing, and it is not really worth it.

The idea is that a X level fighter is equal to about a X level monster!
This implies that the <THAC0> ought to decrease by one every level
(starting at '20' on level 1 - minimum is '1' from level 20+). The damage
given by a monster is also important - average weapon damage is at the
moment 1d8.


Level    AVERAGE          AVERAGE  SUGGESTED  SUGGESTED  SUGGESTED
          <HP>             <EXP>    <THAC0>     <AC>       <DAM>

  0    [001..010]           [25]       20        10        1d4+0 (2.5)

  1    [011..022]          [100]       20         9        1d5+0 (3.0)

  2    [023..035]          [200]       19         8        1d6+0 (3.5)

  3    [036..047]          [350]       18         7        1d7+0 (4.0)

  4    [048..060]          [600]       17         6        1d8+0 (4.5)

  5    [061..072]          [900]       16         5        2d4+0 (5.0)

  6    [073..085]         [1500]       15         4        1d8+1 (5.5)

  7    [086..097]         [2250]       14         4        2d4+1 (6.0)

  8    [098..110]         [3750]       13         3        2d5+1 (7.0)

  9    [111..122]         [6000]       12         3        2d5+1 (7.0)

 10    [123..135]         [9000]       11         2        2d6+1 (8.0)

 11    [136..147]        [11000]       10         2        2d6+1 (8.0)

 12    [148..160]        [13000]        9         2        2d7+1 (9.0)

 13    [161..172]        [16000]        8         2        2d7+1 (9.0)

 14    [173..185]        [18000]        7         1        2d8+1 (10.0)

 15    [186..197]        [21000]        6         1        2d8+2 (11.0)

 16    [198..210]        [24000]        5         1        2d8+2 (11.0)

 17    [211..222]        [28000]        4         1        3d6+2 (12.5)

 18    [223..235]        [30000]        3         0        3d6+2 (12.5)

 19    [236..247]        [35000]        2         0        3d6+3 (13.5)

 20    [248..260]        [40000]        1         0        3d6+4 (14.5) /* Minor Demons */


Above level 20 is for NPC's only


 21    [261..350]        [50000]        0        -1        3d7+4 (16.0)

 22    [351..400]        [60000]        0        -1        3d8+4 (17.5)

 23    [401..450]        [80000]        0        -2        3d8+4 (17.5) /* Shopkeepers, Important Guards */

 24    [451..500]       [100000]        0        -3        3d8+4 (17.5) /* Guildmasters       */

 25    [501..550]       [130000]        0        -4        4d6+4 (18.0)

 26    [551..600]       [155000]        0        -6        4d6+4 (18.0) /* Major Demons/ Devils */

 27    [601..650]       [200000]        0        -7        4d6+4 (18.0) /* Demi Gods */

 28    [651..700]       [310000]        0        -8        4d6+5 (19.0) /* Lesser Gods */

 29    [701..900]       [450000]        0        -9        4d7+5 (21.0) /* Demon Lords/Arch Devils */

 30    [901..1000]      [600000]        0       -10        4d8+5 (23.0)/* Greater Gods       */



------------------------------ GUIDELINES ---------------------------------

MAGICAL ITEMS:
--------------

In DikuMud it is possible to create all kinds of Magic items - but to avoid
chaos (having 1st levels kill 20 level dragons) these rules for Magic must
be obeyed.
It is possible to create almost any item. Items can (example) change the
<STR>, <DEX>, <WIS>, <INT>, <CON>, <HP>, Age, Weight, Height, XP,
#
DOC_DEFS3

etc. None of these changes are directly permanent in effetct, but may be
so indirectly - example:

  Iggy found a helmet of Increase Wisdom/Intelligence (some + modifier).
  When Iggy wear this helmet - these abilities improve, when he removes
  the helmet they return to their original state. Thus no direct change
  has happened. BUT if Iggy practices spells (upon which INT and WIS
  determines the rate & success) he will learn them much faster than
  normal. This was an example of an indirect change.


Good ideas when making Magic Items:

NEVER use large modifiers, exceptional items should modify at most by +3.
  This includes, swords, armours, ability changes.

Impose a penalty on the Item - for example make a helmet of wisdom may
  at the same time reduce the constitution. Or maybe a ring of masochism -
  when you wear it your MAX-HITPOINT increase by +200, when you remove it
  they disappear again. The ring likes to remove itself from the finger.

No more than ONE item should exist in the world at any time (this is set
in the ZONE file) - thus players must kill each other if they want
something really bad.


============================================================================

MONSTER CLASSIFICATIONS:
------------------------

Major Demon  == Balrog/etc.
Demon Lords  == Orcus/etc.
Demi Gods    == ??
Lesser Gods  == Heimdal/Sif/etc.
Greater Gods == Thor/Odin/etc.
Arch Devil   == Asmodeus/etc.

When creating monsters pay attention to the table above.

Example of Monsters:
--------------------

============================================================================


--------------------------------------------
       CHARACTER & MONSTER ARMOR:

<AC> range from [10..-10] this is what it means :

AC  10 = Naked person
AC   0 = Very heavily armoured person (Full plate mail at *all* body parts)
AC -10 = Armored Tank (Hopefully impossible for players)

--------------------------------------------
     Percentwise Coverage of Armour
        and allowed AC range

Location  Protects   Range
--------  --------   -----

Body        30%      [1..10]
Head        20%      [1..10]
Legs        20%      [1..10]
Feet        10%      [1..10]
Arms        10%      [1..10]
Hands       10%      [1..10]

Shield      10%      [1..10]
Magic       10%      [1..10]

--------------------------------------------
             PRICE GUIDELINES

 AC     BODY    LEGS    HEAD    ARMS    FEET       ARMOUR
----    ----    ----    ----    ----    ----       ------
 +1      100      50      50      25      25       Cloth (Heavy)
 +2      200     100     100      50      50       Soft Leather
 +3      500     150     150      75      75       Studded Leather
 +4    1,000     500     500     250     250       Scale Mail
 +5    2,500   1,250   1,250     625     625       Chain Mail
 +6    7,000   3,500   3,500   1,750   1,750       Bronze Plate Mail
 +7   18,000   9,000   9,000   4,500   4,500       Plate Mail
 +8   35,000  17,500  17,500   8,750   8,750       Field Plate Mail
 +9   50,000  25,000  25,000  12,500  12,500       Full Plate
+10   75,000  37,500  37,500  18,750  18,750       Anti Bomb ShieldPlate

*Hands and shields should be regarded as arms.
--------------------------------------------
           IMPORTANT NOTICE

Rare items may only exist in minimal quantities!
Especially you should limit the occurence of
magical protection, since it is easy to carry.

============================================================================

Weapons & Carrying capacity
---------------------------
#
DOC_DEFS4


The weight of a weapon determines the strength needed to wield the weapon,
these values should be used:

STR     Max. Weapon Weight    Carrying capacity
---     ------------------    -----------------
  0           0                      0
  1           1                      3
  2           2                      3
  3           3                     10
  4           4                     25
  5           5                     55
  6           6                     80
  7           7                     90
  8           8                    100
  9           9                    100
 10          10                    115
 11          11                    115
 12          12                    140
 13          13                    140
 14          14                    170
 15          15                    170
 16          16                    195
 17          18                    220
 18          20                    255
 18/01..50   22                    280
 18/51..75   24                    305
 18/76..90   26                    330
 18/91..99   28                    380
 18/100      30                    480

Strength above 18/100 is only used by NPC's - not used by players.
No weapon may ever exceed 30 pounds in weight.

There are three kind of weapons :
  (P)iercing
  (S)lashing  (Not useable by Clerics)
  (B)ludgeoning

Backstabbing is only possible with piercing weapons.

No weapon may ever exceed 4d6 damage (as total of magic bouns too)!
   (4d6 is 14 damage as average since 4*((1+6)/2)==14)
No weapon may ever exceed 30 pounds in weight.

No shop-produced weapon may exceed 2d8 in total damage or weigh more
   than 20 pounds.

Read notes regarding Magic before making a monster-slayer +50 +70 
  with +800 to strength


PRIMARY BUYABLE WEAPONS <PBW>:

Name               Damage    Type    Cost    Weight   Cost_pr_day     
---------------    -----     ----    ----    ------   -----------
Dagger              1d4       P        10       1       Cost/3 
Small sword         1d6       P        60       3       Cost/3 
Long sword          1d8       S       600       8       Cost/3
Wooden Club         1d3       B        12       3       Cost/3
War hammer          1d5       B        50       6       Cost/3



===========================================================================
Notes:

<THAC0> this is the number needed to roll on a 20-sided dice to hit
        opponent <AC> equivalent of zero. A 20 is always considered
        a hit, a 1 is always a miss. Example:

          Your <THAC0> is 14 (ei. level 7 fighter). You are fighting
          an opponent with <AC> '3'. Thus to hit <AC> 0 you must
          roll a 14 or greater. To hit <AC> 3 you must then roll
          11 (14-3) or greater. If you had to hit <AC> '-3' you
          would have to roll 17 (14-(-3)) or greater on a 20 sided
          dice.
#
DOC_HANDLER

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

Description of module 'handler.c'.

*** Note: All the routines that takes something away from something assumes
that something is actually in/carried by something!

void char_from_room(struct char_data *ch)
Removes ch from whatever room he's in.

void char_to_room(struct char_data *ch, int room)
Places ch in room.

void object_to_char(struct obj_data *object, struct char_data *ch)
Gives object to ch.

void object_from_char(struct obj_data *object)
Takes object away from The character who is carrying it.

struct obj_data *find_object_in_list(char *name, struct obj_data *list)
This procedure assumes that list points to the head of a content-list of
objects. It then tries to locate the object with a given name within that
list. If succesful, the function returns a pointer to that object; if not,
it returns a null pointer.

struct obj_data *find_obj(char *name)
This function searches the 'global' list of objects (pointed to by 
'object_list') for an object with a given name. It then returns either
a null pointer or a pointer to that object (note that in this version,
it will always return the first occurence of an object with a given name).

struct char_data *get_char_room(char *name, int room)
Searches room for character with 'name'. Returns null or pointer to that
character.

struct char_data *get_char(char *name)
Searches the entire world for a character. Assumes that all characters are
in a list pointed to by character_list (This might need changing).

void object_to_room(struct obj_data *object, int room)
Puts an object in a room.

void object_from_room(struct obj_data *object)

void object_to_object(struct obj_data *obj, *obj_to)

void object_from_object(struct obj_data *obj, *obj_from)

void extract_char(struct char_data *ch)
Extracts a character completely from the world, and leaves his stuff in
the room (might be useful.. might not..).


**** Higher level versions of the 'find' routines.
These routines work like the above versions, with the exception that they are
supplied with a pointer to a character as well as a keyword to look for. they 
then return nil if they fail to locate the object/character OR if the character
'using' the routine can't see the searched-for object/character.




struct char_data *get_char_room_vis(struct char_data *ch, char *name)



struct char_data *get_char_vis(struct char_data *ch, char *name)



struct obj_data *find_object_in_list_vis(struct char_data *ch, char *name,
                                struct obj_data *list)



/*search the entire world for an object, and return a pointer  */
struct obj_data *find_obj_vis(struct char_data *ch, char *name)
#
DOC_INTERPRETER

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

1	 De to grundliggende rutiner i 'interpreter.c' er :

    	search_block og
   	argument_interpreter

1.1  	 SEARCH_BLOCK

	 Formaalet med denne rutine er, at finde en eventuel overensstemmelse
	mellem en (sandsynligvis af brugeren indtastet) streng og en tabel af
	strenge.

	 Rutinens hoved:

	int search_block(char *argument, int begin, int length, char **list, int mode)

	I denne rutine indeholder argument den streng der skal undersoeges, begin er den
	position, som det foerste tegn, i den del af argumenter der skal undersoeges,
	befinder sig paa.
	BEMAERK: Som normalt i c, vil det foerste tegn have position 0 !
	Length er laengden af den del af argumenter der skal undersoeges. (1 = et tegn)
	List er den tabel, hvori der skal ledes efter en forekomst af den del af argumentet
	der undersoeges.
	Mode er en 'binaer' variabel:
		TRUE ( != 0 ) : Der er kun tale om en forekomst, hvis laengden af
		  den streng man undersoeger, og laengden i 'list' er ens. ( nor != north ) 
		FALSE ( ==0 ) : Hvis alle tegn i den streng man undersoeger er 
		  identiske med tegn i tabellen, er der tale om er forekomst. ( nor == north )

	List skal vaere afsluttet med "/n" som sidste tegn.

	Den vaerdi, som funktionen returnerer er :
		-1 for ukendt,
		0 for tom streng.
		ellers nummeret i listen ( foerste = 1 !! )


1.2	 ARGUMENT_INTERPRETER

	 Formaalet med denne rutine er, at udlede to 'betydende' dele af 
	en streng.

	 Rutinens hoved:

	void argument_interpreter(char *argument, char *first_arg, char *second_arg)

	 Argument er den streng som de betydende dele skal udledes af.
	First_arg og second_arg indeholder de betydende dele.

	Definitionen paa betydende dele er:
	Ord forskellige fra :
	 in
	 from
	 with
	 the
	 on
	 at 
	 to

	Eksempel 1.

		Argument = "The iceBear wiTh the aXe"

		resultat:

		First_arg = "icebear"
		Second_arg = "axe"

	Som det ses vil store bogstaver blive returneret som smaa.

	Eksempel 2.

		Argument = "The ice bear with the axe"

		resultat:

		First_arg = "ice"
		Second_arg = "bear"

	Her er det meningen, at problemet gaar ud over brugeren.

	Eksempel 3.

		Argument = "The The"
		first_arg = ""
		second_arg = ""

	Eksempel 4.

		Argument = "Th icebear with the axe"
		first_arg = "th"
		second_arg = "icebear"

1.3	 Oevrige dele af interpreter

	 One_argument, som argument_interpreter, dog kun en streng der bliver 
	returneret.

	 Command_interpreter, her bliver hovedordet for kommandoen fundet, og
	den tilsvarende rutine kaldes.

	 Fill_word, er TRUE, hvis argumenter er er 'overfloedigt ord', som
         in
         from
         with
         the
         on
         at
         to
#
DOC_LEVELS

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

------------------------------------------------------------------------
Magic user:
Level  -- xp --  --- titel ------------- str int wis dex con mhp mma mmo
  1     -1.000   Novice                  %05 %10 %10 %02 %02 %08 %10 %10
  2     -2.400   Apprentice              %   %   %   %   %   %   %   %
  3     -5.760   Spellbinder             %   %   %   %   %   %   %   %
  4    -13.824   Conjurer                %   %   %   %   %   %   %   %
  5    -33.118   Magician                %   %   %   %   %   %   %   %
  6    -79.626   Enchanter               %   %   %   %   %   %   %   %
  7   -191.103   Warlock                 %   %   %   %   %   %   %   %
  8   -458.647   Sorcerer                %   %   %   %   %   %   %   %
  9 -1.100.753   Mage                    %   %   %   %   %   %   %   %
 10 -2.641.808   Wizard                  %   %   %   %   %   %   %   %

------------------------------------------------------------------------
Cleric:
Level  -- xp --  --- titel ------------- str int wis dex con mhp mma mmo
  1     -1.000   Believer                %05 %10 %10 %02 %02 %08 %10 %10
  2     -2.400   Acolyte                 %   %   %   %   %   %   %   %
  3     -5.760   Adebt                   %   %   %   %   %   %   %   %
  4    -13.824   Priest                  %   %   %   %   %   %   %   %
  5    -33.118   Curate                  %   %   %   %   %   %   %   %
  6    -79.626   Canon                   %   %   %   %   %   %   %   %
  7   -191.103   Lama                    %   %   %   %   %   %   %   %
  8   -458.647   Patriarc                %   %   %   %   %   %   %   %
  9 -1.100.753   High Priest             %   %   %   %   %   %   %   %
 10 -2.641.808   Noble Priest            %   %   %   %   %   %   %   %

------------------------------------------------------------------------
Thief:
Level  -- xp --  --- titel ------------- str int wis dex con mhp mma mmo
  1     -1.000   Novice                  %05 %10 %10 %02 %02 %08 %10 %10
  2     -2.400   Foodpad                 %   %   %   %   %   %   %   %
  3     -5.760   Cutpurse                %   %   %   %   %   %   %   %
  4    -13.824   Robber                  %   %   %   %   %   %   %   %
  5    -33.118   Burglar                 %   %   %   %   %   %   %   %
  6    -79.626   Magsman                 %   %   %   %   %   %   %   %
  7   -191.103   Thief                   %   %   %   %   %   %   %   %
  8   -458.647   Senior Thief            %   %   %   %   %   %   %   %
  9 -1.100.753   Assassin                %   %   %   %   %   %   %   %
 10 -2.641.808   Guildsmaster            %   %   %   %   %   %   %   %

-------------------------------------------------------------------------
Warrior:
Level  -- xp --  --- titel ------------- str int wis dex con mhp mma mmo
  1     -1.000   Novice                  %05 %10 %10 %02 %02 %08 %10 %10
  2     -2.400   Veteran                 %   %   %   %   %   %   %   %
  3     -5.760   Warrior                 %   %   %   %   %   %   %   %
  4    -13.824   Swordsman               %   %   %   %   %   %   %   %
  5    -33.118   Champion                %   %   %   %   %   %   %   %
  6    -79.626   Knight                  %   %   %   %   %   %   %   %
  7   -191.103   Chevalier               %   %   %   %   %   %   %   %
  8   -458.647   Justiciar               %   %   %   %   %   %   %   %
  9 -1.100.753   Lord                    %   %   %   %   %   %   %   %
 10 -2.641.808   Knight Lord             %   %   %   %   %   %   %   %

-------------------------------------------------------------------------
#
DOC_LICENSE

/* ************************************************************************
*  Copyright (C) 1990, 1991                                               *
*  All Rights Reserved                                                    *
************************************************************************* */

                             DikuMud License

                      Program & Concept created by


Sebastian Hammer
Prss. Maries Alle 15, 1
1908 Frb. C.
DENMARK
(email quinn@freja.diku.dk)

Michael Seifert
Nr. Soeg. 37C, 1, doer 3
1370 Copenhagen K.
DENMARK
(email seifert@freja.diku.dk)

Hans Henrik St{rfeldt
Langs} 19
3500 V{rl|se
DENMARK
(email bombman@freja.diku.dk)

Tom Madsen
R|de Mellemvej 94B, 64
2300 Copenhagen S.
DENMARK
(email noop@freja.diku.dk)

Katja Nyboe
Kildeg}rdsvej 2
2900 Hellerup
31 62 82 84
DENMARK
(email katz@freja.diku.dk)


This document contains the rules by which you can use, alter or publish
parts of DikuMud. DikuMud has been created by the above five listed persons
in their spare time, at DIKU (Computer Science Instutute at Copenhagen
University). You are legally bound to follow the rules described in this
document.

Rules:

   !! DikuMud is NOT Public Domain, shareware, careware or the like !!

   You may under no circumstances make profit on *ANY* part of DikuMud in
   any possible way. You may under no circumstances charge money for
   distributing any part of dikumud - this includes the usual $5 charge
   for "sending the disk" or "just for the disk" etc.
   By breaking these rules you violate the agreement between us and the
   University, and hence will be sued.

   You may not remove any copyright notices from any of the documents or
   sources given to you.

   This license must *always* be included "as is" if you copy or give
   away any part of DikuMud (which is to be done as described in this
   document).

   If you publish *any* part of dikumud, we as creators must appear in the
   article, and the article must be clearly copyrighted subject to this
   license. Before publishing you must first send us a message, by
   snail-mail or e-mail, and inform us what, where and when you are
   publishing (remember to include your address, name etc.)

   If you wish to setup a version of DikuMud on any computer system, you
   must send us a message , by snail-mail or e-mail, and inform us where
   and when you are running the game. (remember to include 
   your address, name etc.)


   Any running version of DikuMud must include our names in the login
   sequence. Furthermore the "credits" command shall always cointain
   our name, addresses, and a notice which states we have created DikuMud.

   You are allowed to alter DikuMud, source and documentation as long as
   you do not violate any of the above stated rules.


Regards,



The DikuMud Group


Note:

We hope you will enjoy DikuMud, and encourage you to send us any reports
on bugs (when you find 'it'). Remember that we are all using our spare
time to write and improve DikuMud, bugs, etc. - and changes will take their
time. We have so far put extremely many programming hours into this project.
If you make any major improvements on DikuMud we would be happy to
hear from you. As you will naturally honor the above rules, you will receive
new updates and improvements made to the game.

#
DOC_LOOK

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

Documentation for look.c

char *find_ex_description(char *word, struct extra_descr_data *list)

Returnerer en pointer til den extra beskrivelse, der har 
noegleordet 'word' i listen 'list', NULL hvis den ikke findes.


void show_obj_to_char(struct obj_data *object, struct char_data *ch,int mode)

Viser et objekt 'object' til en spiller 'ch' .
Mode 0: Description + [detect]
Mode 1: Short_Description + [detect]
Mode 2: Short_Description + [detect] + ["It contains" + list(1)]
Mode 3: ("An"|"A") + Name
Mode 4: Short_Description + [detect] + ["It contains" + list(3)]
Mode 5: Long_Description + [detect]

void list_obj_to_char(struct obj_data *list,struct char_data *ch, int mode)

Udskriver en liste af objekter 'list' til en spiller 'ch' 
i mode 'mode' skal vaere 0,1,2,3 eller 4. Mode 2 og 4 giver 
en liste for hvert objekts indhold (men ikke indholdets indhold!). 
Programmet tager hoejde for usynlighed etc.


void show_char_to_char(struct char_data *i, struct char_data *ch, victim mode) {

Viser en spiller/non-spiller 'victim' til en anden spiller 'ch' 
Mode 0: Normal beskrivelse
Mode 1: Equipment
Mode 2: Inventory
I mode 1,2 tages der hoejde for usynlighed


void list_chars_to_char(struct char_data *list, struct char_data *ch, int mode) 

Udskriver en liste af spillere 'list' til en spiller 'ch'
i mode 'mode' skal vaere 0,1 eller 2. Mode 1 og 2 giver en 
liste for hvert spillers equipment/inventory (men ikke 
indholdets indhold!) Programmet tager hoejde for usynlighed etc.

#
DOC_MACRO

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

void CREATE(result, type, number) 

As in Pascal.. Halts on error..

int IS_SET(flag,bit) 

TRUE if the bit is set in flag, else FALSE.

int CAN_SEE(sub, obj)

TRUE if player 'sub' can see player 'obj', else FALSE.

int CAN_SEE_OBJ(sub, obj)                                               \

TRUE if player 'sub' can see object 'obj', else FALSE.

int GET_POS(ch)

Returns the position of the player 'ch'

int IS_SKILL(ch,skilltype)

Returns TRUE if player 'ch' endure skill 'skilltype', else FALSE.

const char *HSHR(ch) 

Returns players "his/her/its"

const char *HMHR(ch)

Returns players "him/her/it/"

char *GET_NAME(ch)

Returns players name

int IS_NPC(ch)

Returns TRUE if player is NPC, FALSE if player is PC

int GET_LEVEL(ch)

Returns the level of the player.

<pound-sign>define GET_CLASS(ch)

Returns the class of the player.

int CAN_WEAR(obj,part) (IS_SET((obj)->obj_flags.wear_flags,part))

Returns TRUE if object 'obj' can be "worn" on 'part', else FALSE.

int GET_ITEM_TYPE(obj) ((obj)->obj_flags.type_flag)

Returns item 'obj' type.

int IS_OBJ_STAT(obj,stat) (IS_SET((obj)->obj_flags.extra_flags,stat))

Returns TRUE if item 'obj' has status 'stat'.

char *CAP(char *str);

Changes the first character in the string pointed to by str to uppercase. 
Returns str.

int OUTSIDE(ch)

Returns TRUE if ch is in an outdoor room.
#
DOC_NEWSTRUCT

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

FORSLAG TIL AENDRING af structure for PC's og NPC

Jeg foreslaar at char_data.skills laves om, og deles ud i to:

1* HVIS der bliver brug for det, skal strukturen indeholde en
     char_data.spells
   som indeholder noedvendige oplysninger om alle spells, saa som
   "learned" og "recognise" (som er i den nuvaerende skills[]).

2* Der skal laves en ny struktur

   struct affected
   {
      byte duration;
      byte modifier;
      byte location;
      int  bitvector;

      struct affected *next; 
   }

   "duration" som i skills[]

   "modifier" angiver tallet der skal +/- til en abillity (fx. strength)
              dette er ligeledes tallet der skal +/- (omvendt) naar
              duration bliver 0.

   "location" angiver hvilken ability der er tale om, dvs om det er 
              strengt_apply, ac_apply, thaco_apply, etc. (som i skills[])

  "bitvector" Her angives hvilken bit i en status, der er sat (og som skal
              fjernes naar duration = 0). Bit kan fx. vaere BLINDED,
              STUNNED, HELD, CHARMED, og andre helt specielle ting.
              Disse "bit" skal der saa tages hoejde for i look, move
              og andre procedurer.

    "*next"   peger paa naeste element.

   Gr. bitvektoren skal der saa indsaettes en 
		int char_affected;
	 i selve char_data strukturen.

Et umiddelbart problem er, at man ikke kan gemme denne "affected" paa
disken, men Sebastian foreslog, at kopiere listen over i et array i
strukturen char_file_u, her skal der saa fastlaegges et maksimum antal
elementer.

En anden fordel er, at ved nedtaelling af duration, undgaar vi at kigge
paa alle 50 durations (i den gamle skill[]) da den nye struktur benytter
haegter.


S.U. Venligst, da jeg ikke kan implementere spells ordentligt uden en
     aendring af et eller andet...

#
DOC_RUNNING

                           --- Running DikuMUD ---

SYNTAX:

dmserver [-l] [-s] [-d <path>] [<port #>]

nightrun

DESCRIPTION:

Automatic rebooting.

Once a day, at a time specified by the REBOOT_AT macro in modify.c, the
game checks for the existence of the file "reboot" in the selected data
directory. If the file exists, the game is rebooted (it terminates nicely,
with a nonzero return value). If the size of the file is nonzero, its contents
are processed by "sh" (with a system() call). If the processing returns
with a nonzero status, the file is renamed to "reboot.FAILED", and the
rebooting is called off. If it returns zero, the file is moved to
"reboot.SUCCEEDED", and the game is rebooted.


ARGUMENTS:

-l: "Lawful mode". At the University of Copenhagen, regulations demand that
    all games abide by certain regulations. The game must shut down at 9am, on
    workdays, and it must close the connections to all players and enter an
    "idle mode", whenever the system load on the host machine exceeds 6. This
    option makes the game follow these regulations. At present, the code which
    handles these things is an awful hack, and we suggest that you use this
    option with care, and only after examining the code to see how it matches
    the set-up of your host. At present, the code is loosely scattered over
    the various modules, although most of it is to be found in the file
    modify.c.

-s: Disable special routines. The game uses various compiled routines to
    achieve nonstandard effects associated with objects, characters, and rooms.
    Sometimes it is helpful to run the program with a small set of worldfiles,
    to reduce the time consumed at startup, and to limit the core-size of the
    running game. If so, the -s option should be used, to prevent the game
    from associating special procedures to nonexistent objects/characters/
    rooms.

-d: Select data directory. This is useful if you want to keep one or more
    sets of game-data in addition to the standard set. For example, you may
    wish to make a copy of the entire world in a separate directory, so that
    you can test additions to the code or worldfile without subjecting the
    players to unnecessary hazards. The default data directory is 'lib'. Any
    coredumps (may they never happen to you!) will take place in the
    selected directory.

port : Select the port on which the game is to wait for connections. Default
    is 4000.



EXAMPLES:

To run the game in the compact test directory:

dmserver -s -d tmplib

To run the game as standard (on port 4000), simply type:

dmserver

Or:

dmserver >& syslog &

to start the game in the background, storing output in syslog.

OUTPUT:

The game writes various information on stdout as the game runs. This may
be saved to form a log of the run. eg: "dmserver >& syslog".

DATA FILES:

[blah-di-blah blah]


MAINTAINING THE GAME:

The first character to log on (ie. with an empty playerfile), is given maximum
privileges. He/she has acess to the following commands (help is available in
the game):

ADVANCE
STRING
SHUTDOWN
PURGE

And others.
#
DOC_SHOPS

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

<pound-sign><xx>~
  Shop Number (Not used)

<num1>
<num2>
<num3>
<num4>
<num5>
  These numbers refer to the objects the shop produces.
  The numbers are virtual numbers.

<Profit when selling>
  The object value is multiplied by this value when sold. This is a
  floating point value. Must be >= 1.0

<Profit when buying>
  The object value is multiplied by this value when bought. This is a
  floating point value. Must be <= 1.0

<num1>
<num2>
<num3>
<num4>
<num5>
  These five numbers are the item-types traded with by the shop.
  See dbsup.doc.

<Message When Item to buy is non existing>~
<Message When item trying to sell is non existing>~
<Message When wrong item-type sold>~
<Message when shop can't afford item>~
<Message when player can't afford item>~
<Message when buying an item>~
  Price is %d
<Message when selling an item>~
  Price is %d

<Temper 1>
	When player can't afford an item.
  0 - The shopkeeper spits player in the face.
  1 - The shopkeeper smokes his joint.
  other - No action besides message above.

<Temper 2>
	When player is attempting a "kill shopkeeper"
  0 - Shopkeeper tells player "Don't ever try that again!" and gets the
      first hit!
  1 - Shopkeeper tells player "I'm to powerfull for you - midget!" and 
      killing is impossible.
  other - No action besides message above.


<Shop Keeper Mobile Number>
  Virtual number of the shopkeeper.

<With Who>
  Case to be added later. For example character classes.

<Shop Room Number>
   The virtual number the mobile must be in for the shop to be effective.
   (So trans'ed shopkeepers can't sell in the desert).

<Time when open start 1>
<Time when open end 1>
   The hours between which the shop is open.

<Time when open start 2>
<Time when open end 2>
   The hours between which the shop is open.

#
DOC_SKILLS

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

Fighter:                 lv.1    lv.2    lv.3    lv.4    lv.5    lv.6    lv.7    lv.8    lv.9    lv.10
---------           
Sneak                    
Dodge                    
Bargain                  
Read magic               
Arm wrestling            
Uppercut                 
Rescue                   
Bash                     
Kick                     
                         
SAVING THROW:            
                         
Thief:                   lv.1    lv.2    lv.3    lv.4    lv.5    lv.6    lv.7    lv.8    lv.9    lv.10
-------                  
Sneak                    
Dodge                    
Bargain                   
Read magic               
Arm wrestling            
Steal                    
Value
Pick
Hide
Find traps
Disarm
Backstab
Dodge
Read magic

SAVING THROW:

Magic user:              lv.1    lv.2    lv.3    lv.4    lv.5    lv.6    lv.7    lv.8    lv.9    lv.10
------------
Sneak
Dodge
Bargain
Read magic
Arm wrestling
Armor
Burning hands
Charm person
Chill touch
Colour spray
Comprehend language
Dancing lights
Detect magic
Detect evil
Jump
Magic missile
Aura
Protect from evil
Chocking grasp
Sleep
Frighten
Ventriloquate
Blindness
Detect invisibility
Fools gold
Make invisible
Paralyse
Strength
Fireball
Hold
Lightning bolt
Enchant weapon
Remove curse
Control weather
Mordenkanien's sword
Prismatic ray
Clone
Energy drain

SAVING THROW:

Cleric:                  lv.1    lv.2    lv.3    lv.4    lv.5    lv.6    lv.7    lv.8    lv.9    lv.10
--------
Sneak
Dodge
Bargain
Read magic
Arm wrestling
Bless
Detect evil
Detect poison
Detect magic
Curse
Cure light
Cure blind
Protect from evil
Remove fear
Sanctuary
Flaming blade
Hold
Poison
Call lightning
Create food
Create wather
Dispel magic
Dispel evil
Locate object
Prayer
Remove curse
Remove paralysis
Cure critic
Heal
Harm
Word of recall
Earthquake
Holy word

SAVING THROW:

#
DOC_SPELL_INFO1

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

                 OFFENSIVE SPELL AVERAGE DAMAGE CHARTS


Upon learning a new spell, the manauser will always be able to cast
two of these spells. For each level, the manauser will be abel to cast
one additional spell of the type learned. The maximum abel to learn is
different between each spell, but for most offensive spells it is 7.
The number of spells that can be cast assume that everybody has got
100 mana points.


General Idea:
  A M.U. Should be abel to kill a victim 3 levels below himself, by
  using all his MANA points for offensive spells. This include
  saving_throw calculations.


Saving throw has effect (level of victim = L, damage of spell = D)

   Actual_Average_Damage = (L/20*(D/2))+(((20-L)/20)*D)
     where L in [1..18] (Means saving never better than 2)

   If you want to know how much dam, say E, a L level victim,
   get from D dam, then:

   Effective_Dam (E) = D/(1-(L/40))


---------------------------------------------------------------------------
TABLE:
     LVL is level of victim.
     HP  is hit_points.
     ERM is spell damage to effectively remove HPR
     SAV is assumed saving throw
     A.DIF. is Aprroximate adjusted difference.


LVL       1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20
SAV      20   19   18   17   16   15   14   13   12   11   10    9    8    7    6    5    4    3    2    2
HP       22   35   47   60   72   85   97  110  122  135  147  160  172  185  197  210  222  235  247  260
ERM      22   37   51   67   82  100  118  138  157  180  203  229  255  285  315  350  386  427  470  495
A.DIF       15   15   16   16  18   18   20   20   23   23   26   26   30   30   35   35   41   43    -

---------------------------------------------------------------------------
Table of WHEN a MU can kill a Level X opponent by using 100 MANA points only.

MU Level  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
Opponent  0  0  0  1  2  3  5  6  7  8  9 10 12 13 14 15 16 17 18 20

---------------------------------------------------------------------------

Magic Users New Damage Table. The damage listed by each spell shows how
much damage can be given by using 100 mana points at the apropriate level.
To make it worth-while to learn new damaging spells, a spell which is 
"overlapped" by a new spell will give less damage than the exact calculated
average.

Spell     1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20

Mag Mis   6   10    16  18   32   45    "    "    "    "    "    "    "    "    "    "    "    "    "    "
Chill*              16  22   34   47   76   93    "    "    "    "    "    "    "    "    "    "    "    "
Burn Han                     37   51   79   96  112  132    "    "    "    "    "    "    "    "    "    "
Shock                                  82  100  115  135  151  174    "    "    "    "    "    "    "    "
Lightb                                          118  138  154  177  225  251    "    "    "    "    "    "
Spray                                                     157  180  229  255  280  310    "    "    "    "
Energy                                                               11   17   22   28   33   39   39   39(11)
Fireb                                                                         285  315  350  386  427  495

  *Chill Touch may reduce STR by -1 when failing saving throw.


#
DOC_SPELL_INFO2

Clerics

Spell     1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20

Earthq                                  *
Dispel Evil                                            *
Call Lightn                                                      X
Harm                                                                            X

Dispel Evil is special (0..100) (7 Max)
Earthquake is special           (7 Max)
Call Lightning is special       (7 Max)
Harm is fairly special          (3 Max)




*** NEW *** Spell listing By Level and Class


LEVEL     Magic User               Cleric


           (1) Magic Missile        (1) Armor
           (1) Ventriloquate        (1) Cure Light

           (2) Detect Magic         (2) Create Water
           (2) Detect Invisible     (2) Detect Poison

           (3) Chill Touch          (3) Create Food
           (3) -                    (3) Detect Magic

           (4) Invisibility         (4) Cure Blind
           (4) -                    (4) Detect Evil

           (5) Burning Hands        (5) Bless
           (5) Armor                (5) Detect Invisible

           (6) Locate Object        (6) Blindness
           (6) -                    (6) Protection from Evil

           (7) Shocking Grasp       (7) Earthquake
           (7) Strength             (7) Sense Life

           (8) Blindness            (8) Summon
           (8) Teleport with Error  (8) Poison

           (9) Lightning Bolt       (9) Cure Critic
           (9) -                    (9) Remove Poison

          (10) Control Weather     (10) Locate Object
          (10) -                   (10) Dispel Evil

          (11) Color Spray         (11) Word of Recall
          (11) -                   (11) -

          (12) Enchant Weapon      (12) Call Lightning
          (12) Curse               (12) Remove Curse

          (13) Energy Drain        (13) Control Weather
          (13) -                   (13) Sanctuary

          (14) Sleep               (14) Heal
          (14) Charm Person        (14) -

          (15) Clone               (15) Harm
          (15) Fireball            (15) -


#
DOC_SPELLS

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

                      OUT OF DATE I THINK (MS)



Description of affected_type structure:

struct affected_type
{
  byte type;           /* The type of spell that caused this      */
  byte duration;       /* For how long its effects will last      */
  byte modifier;       /* This is added to apropriate ability     */
  byte location;       /* Tells which ability to change(APPLY_XXX)*/
  long bitvector;      /* Tells which bits to set (AFF_XXX)       */

  struct affected_type *next;
};

The type is set to the constants defined in spells.h. These are any of
SPELL_XXX, ei. SPELL_ARMOR.

Duration will be decreased at each time update.

Location is determined by the APPLY_XXX, ei. APPLY_STR to change strength.

Modifier will be added to the apropriate APPLY_XXX

Bitvector will set bits in the char_data->char_special_data.affected_by

---------------------------------

Description of handler.c routines:


void affect_location_apply ( struct char_data *ch,
		 struct affected_type *af, int type);

/* This procedure will (depending on type) Apply or Remove a characters */
/* special bonus to abilities, which have been gained by spells         */

When Type is 1, Modifier will be added to an ability, and Bitvector will
set bits in the "char_data->char_special_data.affected_by" bitvector. When
Type == 0, Modifier is subtracted, and bits are removed.



void affect_to_char( struct char_data *ch, struct affected_type *af )

This procedure allocates new memory for an affected_type structure, and 
inserts a copy of "*af" in the char_data->affected linked list. After
insertion, the "affect_location_apply" is called, with type == 1.




void affect_remove( struct char_data *ch, struct affected_type *af )

This procedure is the reverse of affect_to_char. Upon calling "af" MUST
point to the structure(element) in the linked list that is to be removed.
If not, the program will do an "exit()". Memory used is released, and
"affect_location_apply" is called, with type == 0.
BEWARE! Some spells may have several structures, since they must change
more than one attribute! Calling affect_from_char does not mean that you
have removed every occurence of a certain spell. But you can be sure that
bits are masked out! Use affect_from_char below.
---------------------------------



void affect_from_char( struct char_data *ch, byte skill )

This fixes the warning above, by calling affect_remove with every
structure that has same spelltype set as skill.




bool affected_by_spell( struct char_data *ch, byte skill )

This procedure will check if a character is affected by a spell (the
SPELL_XXX constants are used). Returns FALSE if not, otherwise TRUE.

#
DOC_TIME

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */

Time of DikuMud

  DikuMud has 7 days per week
             35 days per month
             17 months per year

Time of DikuMUD compared with real world.

DikuMud time is 48 times faster than the real time. This implies that
for example 75 seconds is the same as 1 hour dikumud time.
#
DOC_UPDATE


New features/bug fixes added : (no on-line help at this time)

-- BOARD.c : 
	The message board has been fixed, and a special board for gods
has been added.  New boards can now be easily added to BOARD.c.
Object #3098 is the holy board (for level >= 21), by default, it
is in the Chat Room (1200).  In the /lib directory, you must have
the files : "board.messages" and "god.messages" (empty at first).

-- force local <action> 
	Just like "force all", except only affects those in the room.

-- gecho == global echo
	Same as echo except everyone hears it.

-- holylite (toggle on/off) 
	When on, a god can see in dark rooms.  Note, this does not allow
others to see too, just you.

-- wizinvis (toggle)
	Turns the god invisible, and he/she can only be seen by 
a god of an equal or higher level.  Also, gods can see all invisible
objects without needing a detect invis spell.

-- wiznet <text>
	Just like shout, except only level >= 21 will hear it.

-- wimpy (toggle)
	Turn yourself into a wimp so you flee if hurt.

-- poofin <text>
	When a god teleports, instead of appearing in an ear
	splitting bang, you can describe your arrival.

-- poofout <text>
	When you teleport (goto) out of a room, this is your departure 
	message.

-- teleport <victim> <room>
	Teleport someone to a room # *or* to another player/monster.

	ie. teleport jeff baker

New monster stuff :

ACT_AGGRESSIVE_GOOD/EVIL/NEUTRAL : 
	If ACT_AGGRESSIVE is set for a mobile, it attacks everything.
IF you *also* set one (or more )of these modes along with ACT_AGGRESSIVE, 
then it will only attack the specified alignments.  This info is stored
in a bit vector (see structs.h).

ie. if the queen spider has ACT_AGGRESSIVE and ACT_AGGRESSIVE_GOOD, 
    then she will *ONLY* be aggressive against people with good alignment.

This allow us to create realms for a particular alignment.

#
DOC_VALUES1

/* ************************************************************************
*  Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
************************************************************************* */


                     ITEM VALUE DOCUMENTATION
                           "values.doc"


These values are used, as illustrated below, with the different
item types. The various item types are shown in dbsup.doc.



ITEM_LIGHT (1)
Value[0]: Not Used
Value[1]: Not Used
Value[2]: Number of hours the light can be used for. Zero hours means that
          the light has gone out. A negative number will create an eternal
          light source.
Value[3]: Not Used


ITEM_SCROLL (2)
Value[0]: Level of the spell on the scroll.
Value[1]: Which spell (see list somewhere around the end of file)
Value[2]: Which spell
Value[3]: Which spell
  The values(1-3) are three (or less) different spells, mixed 'on' the scroll.
  Unused spells should be set to -1.


ITEM_WAND (3)
Value[0]: Level of spell in wand.
Value[1]: Max Charges (1..X)
Value[2]: Charges Left
Value[3]: Which spell in wand (see list somewhere around the end of file)


ITEM_STAFF (4)
Value[0]: Level of spell in staff.
Value[1]: Max Charges (1..X)
Value[2]: Charges Left
Value[3]: Which spell in staff (see list somewhere around the end of file)


ITEM_WEAPON (5)
Value[0]: Not Used
Value[1]: Number of dice to roll for damage
Value[2]: Size of dice to roll for damage
Value[3]: The weapon type. Type is one of:

         NUMBER  CATEGORY   Message type
            2  : Slash         "whip/whips"
            3  : Slash         "slash/slashes"

            6  : Bludgeon      "crush/crushes"
            7  : Bludgeon      "pound/pounds"

           11  : Pierce        "pierce/pierces"

          New types will be added as needed.


ITEM_FIREWEAPON (6)
Value[0]: -
Value[1]: -
Value[2]: -
Value[3]: -

#
DOC_VALUES2

ITEM_MISSILE    (7)
Value[0]: -
Value[1]: -
Value[2]: -
Value[3]: -

ITEM_TREASURE   (8)
Value[0]: -
Value[1]: -
Value[2]: -
Value[3]: -

ITEM_ARMOR      (9)
Value[0]: The effective AC. >0 enhances the armour class. <0 reduces the
          the armour class (cursed armour for example).
Value[1]: -
Value[2]: -
Value[3]: -

ITEM_POTION    (10)
Value[0]: Level of the spell in the potion.
Value[1]: Which spell (Listed elsewhere in this file)
Value[2]: Which spell
Value[3]: Which spell
  The values(1-3) are three (or less) different spells, mixed in the potion.
  Unused spells should be set to -1.
   Eg.
   Value 0 : 30  (Level)
   Value 1 : 27  (Harm)
   Value 2 : 17  (Curse)
   Value 3 :  4  (Blindness)
     (* Don't drink this - It's bad for your health! *)


ITEM_WORN      (11)
Value[0]: -
Value[1]: -
Value[2]: -
Value[3]: -

ITEM_OTHER     (12)
Value[0]: -
Value[1]: -
Value[2]: -
Value[3]: -

ITEM_TRASH     (13)
Value[0]: -
Value[1]: -
Value[2]: -
Value[3]: -

ITEM_TRAP      (14)
Value[0]: -
Value[1]: -
Value[2]: -
Value[3]: -

ITEM_CONTAINER (15)
Value[0]: Maximum weight the container can contain.
Value[1]: Container flags:

   CLOSEABLE     1
   PICKPROOF     2
   CLOSED        4
   LOCKED        8

Value[2]: The item-number of the object which can open the object. -1 means
          no lockability.
Value[3]: Internal use for Corpses that must "rot".
#
DOC_VALUES3

ITEM_NOTE      (16)
Value[0]: Tounge (language of writing). Not yet used.
Value[1]: -
Value[2]: -
Value[3]: -

ITEM_DRINKCON  (17)
Value[0]: Maximum drink-units the drink-container can contain.
Value[1]: Number of drink-units that are left in the container.
Value[2]: The type of liquid in the drink-container, one of:

              Type           nr.    Effect
                                    Drunkness   Fullness   Thirst

              LIQ_WATER      0      0           1           10
              LIQ_BEER       1      3           2           5
              LIQ_WINE       2      5           2           5
              LIQ_ALE        3      2           2           5
              LIQ_DARKALE    4      1           2           5
              LIQ_WHISKY     5      6           1           4
              LIQ_LEMONADE   6      0           1           8
              LIQ_FIREBRT    7      10          0           0
              LIQ_LOCALSPC   8      3           3           3
              LIQ_SLIME      9      0           4           -8
              LIQ_MILK       10     0           3           6
              LIQ_TEA        11     0           1           6
              LIQ_COFFE      12     0           1           6
              LIQ_BLOOD      13     0           2           -1
              LIQ_SALTWATER  14     0           1           -2
              LIQ_COKE       15     0           1           5

          The above values for drunkness/fullness/thirst are used per 
          four "units" drunk. The values are expressed in HOURS!
          Example:
            Dragon empties a bottle (say 7 units) of saltwater.
            His Drunkness is not changed ((7/4)*0)
            His Fullness increases by ((7/4)*1) hours
            His Thirst increases by ((7/4)*-2) hours, thus making
               him More thirsty.

          The hours above are numbers between 0 and 24. 24 hours is
          maximum for drunkness/fullness/thirst. When hours are zero
          for any drunkness/fullness/thirst the person will be
          sober, hungry, or thirsty respectively.

Value[3]: if this value is non-zero, then the drink is poisoned.

ITEM_KEY       (18)
Value[0]: The key-type. This value must match the lock-type the door
          that the key can open. 
Value[1]: -
Value[2]: -
Value[3]: -

ITEM_FOOD      (19)
Value[0]: The number of hours, that this food will fill the stomach
Value[1]: -
Value[2]: -
Value[3]: If this value is non-zero, the food is poisoned.

ITEM_MONEY     (20)
Value[0]: The number of gold coins "in the pile of coins".
Value[1]: -
Value[2]: -
Value[3]: -

#
DOC_VALUES4

ITEM_PEN       (21)
Value[0]: -
Value[1]: -
Value[2]: -
Value[3]: -

ITEM_BOAT      (22)
Value[0]: 
Value[1]: 
Value[2]: 
Value[3]: 


-------------------------------------------------------------------------
                              IMPORTANT NOTICE!!

Since the level versus average damage calculations are performed as shown
in "spell_info.doc" all the offensive spells are individually much stronger
than higher level spells. For example:

  1 fireball of level 15 gives more damage than one of level 16 which give
    more damage than level 17 which give more damage than level 18 which
    give more.... etc.

  Thus please make all offensive potions/scrolls/etc. as the basic level
  they are designed for. You can see the level below. You can see the spells
  average damage, by looking at the spell versus the level of the spell,
  divided by the number of spells learned at that particular level. Example:

  Level 9 Lightning bolt give (102/2) average damage. Divided by 2, because
          this is the level at which it is first learned (You can almost
          always cast two spells are first learned level). At level 10 it
          gives (120/3) average damage.

Looking at the table in "spell_info.doc", you should know that each spell
is designed so that it will kill a victim three levels below the mana user,
if the manauser ONLY cast his spell....


-------------------------------------------------------------------------
The Y/N rows below indicate which potions/scrolls/wands/staffs that are
possible to make. The MIN_LEV is the Minimum Level DEMANDED by the item
you are making. The game will crash if making level less than demanded.

-------------------------------------------------------------------------
                                   POTION  SCROLL  WAND  STAFF   MIN_LEV
TYPE_UNDEFINED               -1      Y       Y      Y      Y        -
SPELL_RESERVED_DBC            0      N       N      N      N        -
SPELL_ARMOR                   1      Y       Y      Y      N        >0
SPELL_TELEPORT                2      Y       Y      Y      Y        >0
SPELL_BLESS                   3      Y       Y      Y      N        ...
SPELL_BLINDNESS               4      Y       Y      Y      Y
SPELL_BURNING_HANDS           5      N       N      N      N        == 5
SPELL_CALL_LIGHTNING          6      Y       Y      N      Y        >=12
SPELL_CHARM_PERSON            7      N       Y      N      Y
SPELL_CHILL_TOUCH             8      N       N      N      N        == 3
SPELL_CLONE                   9      Y       Y      Y      N
SPELL_COLOUR_SPRAY           10      N       Y      Y      N        ==11

SPELL_CONTROL_WEATHER        11      N       N      N      N
SPELL_CREATE_FOOD            12      N       Y      N      N
SPELL_CREATE_WATER           13      N       N      N      N
SPELL_CURE_BLIND             14      Y       N      N      Y
SPELL_CURE_CRITIC            15      Y       N      N      Y
SPELL_CURE_LIGHT             16      Y       N      N      Y
SPELL_CURSE                  17      Y       Y      N      Y
SPELL_DETECT_EVIL            18      Y       N      N      Y
SPELL_DETECT_INVISIBLE       19      Y       N      N      Y
SPELL_DETECT_MAGIC           20      Y       N      N      Y
SPELL_DETECT_POISON          21      Y       Y      N      N
SPELL_DISPEL_EVIL            22      Y       Y      Y      Y       == 10
SPELL_EARTHQUAKE             23      N       Y      N      Y       == 7
#
DOC_VALUES5

SPELL_ENCHANT_WEAPON         24      N       Y      N      N
SPELL_ENERGY_DRAIN           25      Y       Y      Y      Y       == 13
SPELL_FIREBALL               26      N       Y      Y      N       == 15
SPELL_HARM                   27      Y       N      N      Y       == 15
SPELL_HEAL                   28      Y       N      N      Y
SPELL_INVISIBLE              29      Y       Y      Y      Y
SPELL_LIGHTNING_BOLT         30      N       Y      Y      N       == 9

SPELL_LOCATE_OBJECT          31      N       N      N      N
SPELL_MAGIC_MISSILE          32      N       Y      Y      N       == 1
SPELL_POISON                 33      Y       N      N      Y
SPELL_PROTECT_FROM_EVIL      34      Y       Y      Y      Y
SPELL_REMOVE_CURSE           35      Y       Y      N      Y
SPELL_SANCTUARY              36      Y       Y      N      Y
SPELL_SHOCKING_GRASP         37      N       N      N      N       == 7
SPELL_SLEEP                  38      Y       Y      Y      Y
SPELL_STRENGTH               39      Y       Y      N      Y
SPELL_SUMMON                 40      N       N      N      N

SPELL_VENTRILOQUATE          41      N       N      N      N
SPELL_WORD_OF_RECALL         42      Y       Y      Y      Y
SPELL_REMOVE_POISON          43      Y       N      N      Y
SPELL_SENCE_LIFE             44      Y       N      N      Y

SPELL_IDENTIFY              *53*     N       Y      N      N
#
MURDER

You can murder another player with this command. It will flag you
as a killer if the victim does not have a killer flag. HIT and KILL
no longer work against player characters.

See also: HIT, KILL
#
NOKILL

This command toggles the NOKILL option. If set, you will not be able
to accidentally attack another fellow player. Thus, you cannot attack
a player with KICK, BACKSTAB, spells, staves, etc. If you are attacked,
you will be able to attack back as normal. All players entering the
game have this flag automatically set. There should be no more need for
PARDONing.
#
PARDON

This command which can only be used by Lesser Gods or higher
will remove the KILLER/THIEF flags.

There should be no need for pardonings, as the new NOKILL command has
been instituted.
#
KILLER THIEF

You get the killer flag for attacking another player, and a THIEF flag
for failing a steal attempt against a player.

Guards will kill killer/thief-flagged people on sight.
#
SAMPLE_WLD

<pound-sign>3009
The Bakery~
   You are standing inside the small bakery.  A sweet scent of Danish and
fine bread fills the room.  The bread and Danish are arranged in fine order
on the shelves, and seem to be of the finest quality.
A small sign is on the counter.
~
30 8 0
D2
You see the main street.
~
~
0 -1 3013
E
danish pastry~
You see that this is truly delicious pastry.  Must be made by a Dane from
Denmark (which surely is not the capital of Sweden!).  Former ruler of
Scandinavia, England, Northern Germany, Northern France, Russia, Greenland,
Iceland, Estonia etc. etc.
   The sight of those large, wholesome chokoladeboller makes your mouth water
and your soul sing.

~
E
sign~
Free instructions provided by the store:

   Buy  - Will buy you some bread or pastry.
   List - The baker will kindly tell you the price and sort of the bread in
          his bakery.
~
S
<pound-sign>3010
The General Store~
   You are inside the general store.  All sorts of items are stacked on shelves
behind the counter, safely out of your reach.
A small note hangs on the wall.
~
30 8 0
D2
You see the main street.
~
~
0 -1 3015
E
note~
The note reads:

  List  - Show which various items are in the store.
  Buy   - Buy an item.
  Value - The shopkeeper will (free of charge) tell how much he will
          pay for your item.
  Sell  - Sell an item.
~
S
<pound-sign>3011
The Weapon Shop~
   You are inside the weapon shop.  There is a small note on the counter.
~
30 8 0
D2
You see the main street.
~
~
0 -1 3016
E
note~
The note reads:

  List  - Show which various items are in the store.
  Buy   - Buy an item.
  Value - The shopkeeper will (free of charge) tell how much he will
          pay for your item.
  Sell  - Sell an item.
~
S
<pound-sign>3012
Main Street~
   You are at the end of the main street of Midgaard.  South of here is the
entrance to the Guild of Magic Users.  The street continues east towards the
market square.  The magic shop is to the north and to the west is the city
gate.
~
30 0 1
D0
You see the magic shop.
~
~
0 -1 3033
D1
You see the main street.
~
~
0 -1 3013
D2
You see the entrance to the Guild of Magic Users.
~
~
0 -1 3017
D3
You see the city gate.
~
~
0 -1 3040
S
<pound-sign>3013
Main Street~
   You are on the main street passing through the City of Midgaard.  South of
here is the entrance to the Armoury, and the bakery is to the north.  East of
here is the market square.
~
30 0 1
D0
You see the bakery.
~
~
0 -1 3009
D1
You see the market square.
~
~
0 -1 3014
D2
You see the armoury.
~
~
0 -1 3020
D3
You see the main street.
~
~
0 -1 3012
S
#
SAMPLE_ZON

<pound-sign>0
LIMBO~
2 1 0
M 0 1 1 1		Puff
S
<pound-sign>1
Goon Rooms~
5 1 2
M 0 23 3 3              Goon
M 0 23 3 3              Goon
M 0 23 3 3              Goon
M 0 30 1 3              Mr. Audran
S
<pound-sign>10
In the Air...~
1099 30 2
*
M 0 1000 10 1005	fairy dragon in sky
G 1 1000 10                wings
M 0 1000 10 1022        ''
G 1 1000 10                ''
M 0 1000 10 1019        ''
G 1 1000 10                ''
M 0 1001 3 1034       Griffon
G 1 1000 10                wings
*
S
<pound-sign>30
Northern Midgaard Main City~
3099 10 2
*
M 0 1203 1 1203       The executioner
E 1 1203 100 16             wield the executioners blade
*
M 0 3000 1 3033       The Wizard Shop Keeper
G 1 3050 500                Give brown potion of cure light wounds.
G 1 3051 500                Give potion of see invisible.
G 1 3052 500                Give ...?
G 1 3053 500                Give ...?
G 1 3054 500                Give ...?
M 0 3069 10 3033      Jester
*
M 0 3003 1 3011       The weaponsmith
G 1 3020 100
G 1 3021 100
G 1 3022 100
G 1 3023 100
G 1 3024 100
G 1 3025 100
E 1 3022 100 16            wields a longsword
M 0 3069 10 3011      Jester
*
M 0 3004 1 3020       The armourer
G 1 3040 100
G 1 3042 100
G 1 3044 100
G 1 3076 100
G 1 3081 100
G 1 3070 100
G 1 3071 100
G 1 3075 100
G 1 3080 100
G 1 3085 100
G 1 3086 100
G 1 3041 100
G 1 3043 100
G 1 3046 100
E 1 3022 100 16            wields a longsword
*
M 0 3002 1 3010       The grocer
G 1 3030 100
G 1 3031 100
G 1 3032 100
G 1 1206 100	        paper
G 1 1205 100		quill
E 1 3022 100 16            wields a longsword
*
M 0 3001 1 3009       The baker
G 1 3010 100
G 1 3011 100
E 1 3022 100 16            wields a longsword
*
M 0 3005 1 3008       The receptionist
O 0 3097 6 3008       ATM 
*
M 0 3006 1 3049       A Captain (selling boats) at Levee
G 1 3060 20              Give a raft to the captain
G 1 3061 10              Give canoe to Captain
*
M 0 3007 1 3050       Sailor selling stuff in the warehouse
*
M 0 3069 10 3014      Jester in middle
*
M 0 3008 1 3056       Uncle Juan
G 1 3012 100
G 1 3013 100
G 1 3014 100
*
M 0 3040 1 3007       The bartender
G 1 3000 100
G 1 3001 100
E 1 3022 100 16            wields a longsword
#
SAMPLE_MOB

<pound-sign>1
Puff~
Puff~
Puff the Fractal Dragon is here, contemplating a higher reality.
~
~
1 0 1000 S
26 1 -1 5d10+550 4d6+3
10000 155000
8 8 2
<pound-sign>23
figure shadow goon~
The shadow assassin of Mr. Audran~
A shadow assassin of Mr. Audran is waiting in the shadows patiently...
~
  The assassin is HUGE yet somehow sneaks easily in and out of the shadows
around himself...dressed in all black, looking both mysterious and DANGEROUS.
You feel compelled to do what he asks.
~
64 524348 0 S
30 0 -10 1d1+1000 4d8+2
1000 5000
8 8 1
<pound-sign>30
big Mr. godfather father Audran master sir~
Mr. Audran~
Mr. Audran is standing here looking at you very closely.
~
Mr. Audran ...is well....Mr. Audran ...enough said...down to business.
~
64 60 0 S
30 0 -10 1d1+2000 100d1+100
1000 5000 
8 8 1
<pound-sign>1000
fairy dragon~
A fairy dragon~
A fairy dragon is fluttering around here looking for something to do...
~
  Its a cute little multi-colored dragon...about 2 foot long.
It gracefully dances around your head.
~
64 24 500 S
5 16 5 1d1+64 2d4+1
20 900
8 8 0
<pound-sign>1001
griffon~
A griffon~
A large black winged griffon swoops into an attack...
~
  Golden maned...and black all over its quite a beautiful creature if not
for the fact it is hungry and is attacking you!
~
96 0 300 S
8 14 4 1d1+104 2d5+2
500 3750
8 8 1
<pound-sign>1203
executioner~
The executioner~
The executioner is here polishing his blade.
~
A masked man with muscles bulging all over his body.  You can tell by
the look in his eyes that he enjoys seeing you cower in his presence.
~
66 524296 -1000 S
30 0 -10 1d1+499 5d10+0
0 500000
8 8 1
<pound-sign>1205
salesman man~
the salesman~
A salesman is here, peddling his wares.
~
Not all salespeople follow the stereotype of their kind too closely, but this
one sure does. From the seventies-style polyester suit to the friendly grin
that doesn't quite ring true, this guy doesn't vary from the image one bit.
~
129 0 350 S
4 15 4 3d4+18 2d5+2
100 500
8 8 1
<pound-sign>1206
scum~
the pond scum~
Some pond scum is floating on the surface of the water.
~
Well, it's scummy and it's floating on the pond.
~
2 0 0 S
3 8 -1 2d8+8 1d5+0
5 200
8 8 2
#
SAMPLE_OBJ

<pound-sign>1000
wings~
~
~
~
23 0 0
0 0 0 0
0 0 0
E
wings~
just for monster use
~
<pound-sign>1001
rose~
a red rose~
A red rose is lying on the ground.~
~
9 0 17
6 0 0 0
8 0 200
E
rose~
This is no ordinary rose, as it is a gift from Dionysos to his 
dearest, Wendella.
~
<pound-sign>1205
Paper Piece~
A piece of paper~
A piece of paper lies here softly blowing in the breeze~
~
16 0 1
0 0 0 0
1 10 5
E
Piece Paper~
~
<pound-sign>1206
Quill Feather~
An feather quill~
A feather lies here in the dirt~
~
21 0 16385
0 0 0 0
1 5 2
E
Feather Quill~
Jet black with a red shaft...looks like a writing utensil!
     (Hint : you need something to write on...then
      while carrying both, type : write on paper with quill)
~
SAMPLE_SHP

<pound-sign>0~
-1
-1
-1
3010
3011
1.1
1.0
0
0
0
0
0
%s Haven't got that on storage - try list!~
%s I don't buy!~
%s I don't buy!~
%s I don't buy!~
%s If you have no money, you'll have to go!~
%s That'll be %d coins.~
%s Oups - %d a minor bug - please report!~
0
0
3001
0
3009
0
28
0
0
<pound-sign>1~
-1
-1
-1
3000
3001
1.1
1.0
0
0
0
0
0
%s It's very noisy in here, what did you say you wanted to buy?~
%s I don't buy!~
%s I don't buy!~
%s I don't buy!~
%s Are you drunk or what ?? - NO CREDIT!~
%s That'll be - say %d coins.~
%s Oups - %d a minor bug - please report!~
0
0
3040
0
3007
0
28
0
0
<pound-sign>2~
3020
3021
3022
3023
3024
1.3
0.4
5
6
7
0
0
%s I haven't got that kind of a weapon~
%s You don't carry that weapon~
%s I only buy weapons.~
%s I can't afford such a great weapon~
%s sorry, but NO CREDIT~
%s That just costs %d coins.~
%s Here you have %d coins for that.~
0
0
3003
0
3011
0
28
0
0
#~