Merc Release 2.1
Sunday 01 August 1993

Furey	mec@shell.portal.com
Hatchet	hatchet@uclink.berkeley.edu
Kahn	michael@uclink.berkeley.edu



=== What's new in 2.1

2.1 is a maintenance release, and contains mainly bug fixes and
contributions after 2.0.

Affects in player files are stored with skill/spell names now, rather
than sn's.  Old 2.0 player files with numbers are accepted and work
fine as long as 'skill_table' in const.c doesn't change.

The 'list' command takes an optional argument.

Several small problems, and one memory corruption, related to voided
characters have been fixed.

'Check_parry' and 'check_dodge' now use the victim's level
rather than attacker's level for base percentage.  (Oops!)

The 'oload' command takes an optional level number.

Container object numbers work now.

Saving while fighting now works properly.

Pets and charmed creatures no longer scavenge.

Immortals have no carry limit or weight limit.

The 'compare' command has a one-argument form now.

The channel code is modular now, but not table-driven yet.  Some of the
channel flags have changed, so players will need to reconfigure their
channels.  Channels no longer pass user input as format strings to 'act'.

The mysterious port-binding bug is fixed.

Merc no longer uses the host system random generator, using its own instead
(the Mitchell-Moore algorithm from Knuth Volume 2).

NPC's no longer steal from immortals.

The anti-corpse-looting code now simply prohibits looting corpses of people in
your group, rather than giving a flag.  Similarly, killing charmed creatures is
simply prohibited rather than flagged (although murdering them is allowed).
Players were getting flagged too easily by accident.

The telnet GA option is now configurable, and the default is off.

There is a donation pit at the altar.

No-exit rooms are automatically given the no-mob attribute.

Eq level randomization is a little more random.

There is a new 'socials' command, analogous to 'commands' and 'wizhelp'.

Corpse sacrificing no longer gives experience points, not even 1.

Non-prime attributes may raise as high as 20 with magical aid.  The 18
training limit is still in effect.

Fleeing and recalling don't cost as many xp.



=== What was new in 2.0

Many of the changes from 2.0 Beta to 2.0 were contributed by our beta testers.
See 'contrib.txt' for acknowledgements.

Several new platforms are supported.

The 'startup' script now works on many more Unix systems.

Containers are back.

Memory management has been redone (again).  Almost all of the static limits
from 1.0 and 2.0 Beta are gone, with neglible performance loss; memory use is
slightly less than 2.0 Beta.

New and improved mortal commands: 'commands' to list all commands; 'configure'
to configure 'brief', 'compact', the 'auto' stuff, et cetera; a new 'who'
command with lots of options.

New and improved immortal commands: 'slookup' to find sn's and slot numbers;
'trust' to give the effect of advancement without changing level;
'transfer' now takes a destination room; 'ban' now matches sites by suffix
(so you can 'ban foo.edu'); 'log all' has been added; 'snoop' now prevents
snoop-looping; 'oset' can set extended descriptions; 'mset' can set a mobile's
spec_fun.

Bug fixes: auto-dropping aligned items had a nasty linked-list bug; 'pose'
was fixed; 'force all' was rewritten.

Several new areas have been added.

Ascii save files are in effect.  Equipment and container contents are saved in
the right place.  Objects which have been oset will keep their new values.
This includes description strings and extra descriptions, so you can look cool
in your Ray-Ban's without restringing them every time you log in.

Object lists are (optionally) displayed with item counts now.

Players may loot only their own corpses or their own groups' corpses.  Other
corpse looting is punished with a PLR_THIEF flag.



=== What was new in 2.0 Beta

The 'lib' directory is gone.  Most of the *.txt files have been moved into
'help.are' as 'help' entries.

The 'doc' directory is much larger.  All the files have been rewritten (with
the exception of 'license.doc').

The help file 'help.are' has been rewritten.  It is now complete and correct.

Merc now uses a different area file system: one area, one file.  Each area is
stored in a separate file.  The list of areas to read on bootup is stored in
the file 'area.lst' in the directory where the server boots.  The server reads
in all area files once on bootup and never touches them again.

The server now generates mobile and object statistics on its own, ignoring the
values in the files.  Statistics are subject to random variation.

We have a dozen new areas.

The server has very good error checking on areas.  Most diagnostics are
accompanied by area file name and line number.  The server does exit after
finding just one error, but Merc loads areas so fast (4 seconds on a Sun-4)
that you can easily use the whole server as a syntax checker.

All code has been re-written.  The entire code base is about 6000 lines smaller
than the 1.0 release, and runs in about half the memory as 1.0.

The external declarations have been re-organized to improve portability.  The
files merc.h and comm.c have OS-specific declaration sections for suitable
external declarations, and comm.c has several OS-dependent sections.  Outside
of these files all of the code is machine-independent.

Many new Unix-based operating systems are supported, and a single-user MS-DOS
version is supported as well.

The code for classes has been consolidated into tables in const.c, making it
much easier to add new classes.  See 'class.txt'.

The skill / spell code has been rewritten.  The entire cast_* layer has been
removed.  The miserable SPELLO declarations have been replaced by more
extensive declarations of skills and spells in 'const.c'.  In particular, the
slot number in #OBJECT area is no longer equal to the internal index number of
a skill or spell, so adding new skills and spells is an order of magnitude
easier.  See 'skill.txt'.

The horrible 'board.c' code has been sent to /dev/null.  In its place we have a
new 'notes' facility.

Player files are now in Ascii form.  You can read them, grep them, edit them,
move them to other machines, do whatever you want with them.  Some fields (in
particular, class, skill, and spell names) have been separated further from
internal constants, making it easier to add new classes, skills, and spells
without upsetting existing player files.

Auto-save is implemented.  One player is saved each tick (whomever has the
most time since previously saving).  Thus with 20 players online, each player
will be saved once every ten minutes.

Many immortal commands are now logged automatically.

All unimplemented spells have been removed.  In particular, several of the
partially implemented 1.0 spells were taken from an undocumented 'magic.c' we
found on ucbvax.berkeley.edu.  These spells were originally written by Dan
Brumleve and we apologize to him for the past infringement.  All of this code
is gone from Merc now.

The main menu ('press 1 to enter the game') has been removed.  There are two
new game commands, 'password' and 'description', to accomplish the same effect.
The 'password' command is protected against logging and snooping.

Tick times and area update times are now random (with an average time set
by PULSE_TICK and PULSE_AREA respectively).

Players no longer gain experience from pkilling.

Players may no longer log in with the same name as mobiles in the game.

The new 'areas' command lists all areas available.  The 'memory' immortal
command shows memory usage.  There are many new and upgraded immortal commands,
and all of them have on-line help now.

The new 'respond' command allows players to hold up their end of the
conversation with invisible or switched immortals.

The 'tell' command may no longer be used to talk to mobiles outside of the
room.

The 'pick' command is now limited.  Mobs will guard a lock against picking by
low level thieves.

The 'steal' command is now limited.  One may not steal from a PC nor from a mob
more than 5 levels above one's level.

Several commands have been removed, including 'ask', 'info', 'pour', 'whisper',
and 'tick'.

The group code has been redesigned, eliminating several bugs in the process.

Mobiles now will join in fights, especially when other mobiles of the same
type are fighting.  Players also automatically auto-assist other players in
their group.

There is a pet shop.  Many bugs related to 'charm' have been fixed.

Several nasty memory allocation bugs were fixed.  These didn't show up on SunOS
or Ultrix, but crashed Linux, NextOS, and many other OS's.  Thanks to Vic for
debugging help.

The bug where getting killed with an 'armor' spell on left one's AC at 120 
(instead of 100) has been fixed.

The server emits a telnet GA sequence at the end of the prompt.

The 'prompt' command disables or enables the prompt.  Handy for immortals who
don't need the prompt, but it's primarily there to reduce output for blind
mudders using speech synthesizers to read their output.  Thanks to
davros@ccwf.cc.utexas.edu for suggesting this feature.

The 'time' command now reports system time, so players in any time zone can
know when your morning shutdown occurs.  It also reports bootup time, so you
can see how reliable your Merc is.

There are no more bags.  Item carrying limits are in effect.

The recall command has been tweaked.  It works perfectly outside of combat.  In
combat, it has a less-than-perfect chance of working, and it costs xp to try it
(more than for flee).  The spell 'word of recall' now just calls the recall
command.

The 'flee' command now reports xp lost.  When a character flees, all characters
fighting it will stop fighting, not just one.  This also fixes the mysterious
'Extract_char: NULL' bugs.

Link dead characters in combat are dealt with more harshly, to discourage
intentional link killing as a way out of combat.

The 'harm' spell is limited to 100 points of damage.

The 'summon' spell is now limited.  One may not summon a person out of combat,
and one may not summon a mob to a different zone.

Characters may not practice until level 3.  They are encouraged to train
instead.
