Changes in top level CVS tree.  A few notes when putting entries in this
file:
1) Please include a date in the form mm/dd/yyyy (yes, us americans are 
screwed up relative to most the world, but some consistent date format
is needed for this file.)
2) You don't need to go into exacting detail of the changes.  This file
is mostly meant to give an idea to others what has changed - you don't
need to recreate the code here.  If you change fixes a reported bug
on the mailing list, please provide a brief description of the bug
fixed.  But please do try to include a useful description of
what changed.  Saying something like 'General cleanup - just whitespace
changes' is much more useful than 'misc edits' or 'code cleanup'.
3) Please include your name with the changes you make.
4) Whenever making an update, please update this file, no matter how
small - this just lets others know that the file has changed if nothing
else.  With this, include the file(s) that you changed.
------------------------------------------------------------------------------
Changes for 1.1.0:

Updates for 1.1.0 release - pretty much all minor bug fixes, like
compiler warning messages, invalid ANSI C constructs, missing files to
include in the distribution.
Makefile.in, include/version.h: update version.
include/Makefile.in: Add some missing files
include/libproto.h, sproto.h: rebuilt to prevent compiler warnings
lib/Makefile.in: Include the wizhelp files in the archive.
server/apply.c, server/skill_util.c: fix invalid code (function parameter
    names can't match structs/typedefs), add a missing return value.
server/c_move.c, server/c_new.c, server/c_object.c, server/commands.c,
    server/daemon.c: Don't include the sproto.h if CEXTRACT is defined.
server/plugins.c: fix printf command that was printing wrong value type.
doc/spoiler-html/Makefile.in: Remove extraneous newline

server/player.c: modify play_again to remove the player object if not done so
already.  This fixes a crash observed on metalforge when a player quit at the
roll/swap stats prompt (undocumented that you can use 'q' then to do so).  It
looks like this should also fix crashes that may be associated with the kick
and shutdown wiz commands.
MSW 2002-03-12

Added new dragon race to crossfire.
Players of this dragon race can gain resistances
by eating the flesh of their defeated foes.
They can also specify in a certain resistance-type
and gain various abilities when increasing levels.
This "focus" can be switched by eating very special
As announced on cf-devel, this is the patch which
adds a new dragon-race to Crossfire.
Players of this dragon race can gain resistances
by eating the flesh of their defeated foes.
They can also specify in a certain resistance-type
and gain various abilities when increasing levels.
This "focus" can be switched by eating very special
flesh, which will be available for sale.
Dragon players gain special titles which cannot
be overwritten by manually set titles.
AndreasV 2002-03-01

lib/collect.pl.in: Modified so that it uses the image.base.xyz.png to make
sure each listed face in objects has an image, and not the old xbm images
for that task.  Also, ignore all files that end in .png, .xpm, or the
face extension - consider them legitimate files for the arch directory.
MSW 2002-02-25

socket/image.c: Change type of image data to be uint8 from char.  Checksums
were being incorrectly calculated when using the char type.  MSW 2002-02-25

server/main.c: If exit is damned, update players death & WoR home-position
    and delete town portal.
server/apply.c: Fix bug in move_apply. return was used instead of goto
    leave, so recursion_depth wasn't decremented.
mids 02/13/2002

server/spell_effect.c: Fix bug in summon_cult_monster that would result
in crash if monster was killed when inserted.  MSW 2002-02-10

common/map.c: load_map_header: If the map message is empty, don't copy
    uninitialized data as the message.  This fixes various crashes.
lib/Makefile.in: Remove the adm/*xpm* utilities, as they are no longer
    needed or distributed.
server/apply.c: set the player speed to zero after they use a savebed.
    Fixes crashes with players that have constant image animation (fireborns)
    when they apply the savebed and the map then gets swapped out.
server/plugins.c: Fix some serious memory leaks.  Some still remain, with
    my comments included.
server/skills.c: Removed unused variable.
MSW 2002-02-05

include/player.h include/sproto.h server/c_chat.c server/player.c:
   New player command 'reply', replies to the last person who told you
   something.
server/c_wiz.c: New DM command 'teleport', lets a DM teleport next
   to target player, it is an inverse summon.
server/commands.c: Add hooks for 'reply' and 'teleport'.
mids 2002-01-16

TODO: updated with bugs, remove things that have been done and are no
  longer TODO's.
configure.in, configure: Remove lib/xpmtopix.pl file form those to be
  built, as that file has been removed.
common/object.c: Fix bug in check_walk_on which would result in spell
  objects not being properly processed - the intention is not to process
  spell objects - we should stop going up (in previous loop) when we
  get such an object, not on the way down.  This fixes directors not 
  working really well.
MSW 2001-01-13

Add the concept of overlay maps to the code.  An overlay map is a map which
is loaded on top of another map, replacing values in the header, and placing
objects on top of other objects.  This is the fundamental part of the new
weather code, but also can be used to allow dynamic editing of the worldmaps
by DM's eventually.
garbled 2002-01-01

server/spell_effect.c: fix animate_bomb so that if the bomb is in a container,
  it does not crash the server - the problem was that it was calling
  drop, which would then drop it right back into the container.  also, the
  x and y coordinates were not being properly set.
MSW 2001-12-31

This change lets the server have multiple image sets.  The client
can then request which image set to use, and the server will use
that image set, falling back to other sets as necessary.  I have tested
this with CVS client, and works fine at least in terms of old functionality.
=
doc/Makefile.in: Add images file which describes image guideline.
doc/Protocol: Various updates - some things missing, added other notes
    about facesets.
doc/images: New file, describes guidelines for image sets, as well
    as some of the internals
include/newserver.h: Update for multiple image set - redid most of the
    image definitions as they were out of date with only png being supported.
include/sockproto.h: rebuilt
lib/Makefile.in: remove crossfire.png, add crossfire.0, crossfire.0.  Update
    build directions to use crossfire.0 instead of crossfire.png
lib/adm/collect_images.pl: Modified to collect all the image sets, remove
    support for collect xpm and xbm images.
lib/crossfire.0: new file, base images
lib/crossfire.1: new file, alternate images
lib/image_info: New file, describes image sets.
lib/crossfire.png, lib/xpmtopix.pl.in: Removed - no longer needed.
socket/Makefile.in: add image.c file.
socket/image.c: Moved all image related data in this file - this includes
    loading the image files, as well as the protocol commands.
socket/init.c: move read_client_images to image.c file.  set ns->faceset
    and ns->facecache to 0.  Move freeing of image data to image.c
socket/request.c: fixed some indentation inconsistencies.add setup commands
    for faceset as facecache.  Move SetFaceMode,SendFaceCmd,esrv_send_face
    to image.c file.
MSW 2001-12-31

common/loader.l, common/loader.c, common/object.c, include/object.h,
   socket/item.c:
   Remove sub_type and sub_type2 information -
   these were poorly named fields and not properly implemented.
common/treasure.c: Add missing return type to change_treasure function.
crossedit/Edit.c: Add SET_MAP_FLAGS macro to set P_NEED_UPDATE flag
   before calling update_position.
include/config.h: Add NEW_WORLD_MAP selection which results in proper
   emergency save paths if you are using the maps-bigworld distribution.
server/c_wiz.c: Fix the formatting (indentation) of the command_create
   function.  No actual changes in how it runs, but the old
   formatting was really terrible and inconsistent.
server/main.c: remove call to send_mapstats_cmd
server/monster.c: Update the comment style to be proper, as well
   as the comments themselves.
socket/request.c: Fix up improper indentation in esrv_update_stats.
   remove send_mapstats_cmd function.
MSW 2001-12-23

Lots of changes here.  Basically implement a night and day system, as
well as tracking of game time.  A clockdata file is now created and
updated by the server to increment time.  Time increases by 1 hour,
approximately every 2 minutes of real time.  Right now this code has
virtually no effect, but as maps are updated with outdoor settings,
nightfall will occur automatically.  The time command has been modified
to show the current game time, and the clock objects have been changed to
show the game time as well.
garbled 2001-12-18

common/map.c: Fix some bugs relating to map tiling.  MSW 2001-12-16

common/object.c random_maps/Makefile.in 
  server/c_wiz.c server/player.c server/plugins.c server/timers.c 
  socket/request.c: Most of the changes are to just fix compiling warnings
  or errors so that it compiles on sparc solaris with the workshop
  compiler (things like }; should just be }).  Declaration for alphasort
  was missing in plugins.c.  random_maps/Makefile.in had the wrong order in
  linking - the system library needs to be linked in after the crossfire
  libraries.
crossedit/App.c: Fix for running on 8 bit color - colormap was not being
  initialized to usuable default value.
crossedit/xutil.c: Broken code when duplicating faces for undefined
  images.  That code should never really be used, as pixmaps currently
  are always contiguous.
MSW 2001-12-15


Include mapstats cmd for extended clients (sdl iso). Cmd is needed for automaps
    ambient media infos, map name and map parameter infos. Paramter infos are used
    for "fire & forget" animation tags inside the map2 cmd (next patch).
server/main.c: include a automatic mapstats cmd every time the player enters a new map.
    Its the "default" mapenter cmd. The script event should used for special cases.
include/sockproto.h and socket/request.c: include the mapstats cmd function.               
MT 2001-12-03

This checkin for the most part removes support for xpm and xbm graphics - 
    now the only image supported is the png.
common/arch.c: comment out printing on warning of object having no type -
    getting 300 meaningless messages at startup is annoying.
common/image.c: Remove X11 color information from colorname array.  Remove
    processing of color_fg and color_bg information from face file - only
    use color_fg if no magicmap information is available - foreground
    and background infoformation was only needed for bitmap graphics.
common/loader.c, loader.l: Add elevation element, comment out some logging
    messages that are excessive and only really relevant for people 
    who want to fix them (really should be in the collect script
    anyways).  Remove some unused code.
common/map.c: add outdoor field to map structure - add support for loading
    and saving it.
crossedit/App.c,crossedit/CrUtil.c, crossedit/Defines.h, crossedit/crossedit.c
    crossedit/xutil.c: Remove support for non png graphics.
crossedit/Attr.c: Add support for elevation variable, remove code for non
    png graphics.
doc/map-technical: Add note about outdoor field.
include/face.h: remove fg, bg fields from face struecture.
include/global.h: Update colorname array definition.
include/loader.h: Add V_ELEVATION field.
include/map.h: Add outdoor field to map structure.
include/newserver.h: Update types so it only loads/knows about png information.
include/object.h: Add elevation field to object structure.
lib/Makefile.in: Remove support for building crossfire.xpm and crossfire.xbm
    files.
lib/animations, lib/archetypes, lib/bmaps, lib/bmaps.paths, lib/crossfire.png,
    lib/faces: Rebuilt.  Main difference is a few sea types, and the fact
    that it hadn't been collected for a while.
server/spell_effect.c: Modify dimension door so that it calls MapNewmapCmd
    so that fog of war does not get confused.  Also, removes call to
    draw as functions further up will do that.
server/spell_util.c: Remove color information from attack information that
    shuffle_attack uses.
socket/init.c, socket/request.c: Remove support for non png images.
MSW 2001-12-02

Various minor bugfixes - 
common/loader.c: rebuilt
include/map.h: Change width,height,enter_x,enter_y to be 16 bit instead
   of 8 bits.
lib/treasures: change skull treasure to tooth instead of skull_tooth since
   the later is not currently in the distributed archetypes file
server/monster.c: Optimize some code, remove some other that is not used.
server/plugins.c: Fix un initialized value in initPlugins that would
   cause crash at startup if plugin directory does not exist.
MSW 2001-11-13

common/object.c: Modify copy_owner so that if a player is passed in
   as the object to copy, we properly set that player as the owner of the
   object instead of returning.  This fixes the lack of exp when poison
   inflicted from a weapon kills something.  MSW 2001-11-05

common/map.c: Fix bug in get_rangevector which was causing reverse
 of documented procedure.  This also resulted in monsters not attacking
 adjacent creatures with physical attacks.  MSW 2001-11-03

Add weapontypes to the game.  These are currently used for nothing other
than messages, which are not fully written yet. Players should not see them
appear yet.
Fix the bug where you opened a door with a key and saw "You ."
Fix a bug in the PLUGIN code where current_weapon wasn't set when the
player loaded from savefile.
Take the setting of current_weapon out of #ifdef PLUGIN
garbled 2001-10-31

server/spell_util.c: Add out_of_map check to can_see_monsterP.  Fixes
  crash when casting ball lightning/divine shock (and likely other events)
  on maps not surrounded by walls.  MSW 2001-10-07

New attacktype messages for damage.  Now it gives you the message for the
damage type you actually did.  So if you are attacking with stormbringer,
you get electrical or drain-based messages.  Also added special messages for
the attack-based skills like punching, karate, etc.
garbled 2001-10-06

common/map.c: Add INS_ON_TOP flag to insert_ob_in_map calls to preserve
   stacking order.  Modify update_position to generate map spaces with
   more proper order.
common/object.c: Modify insert_ob_in_map so that it preserves stacking
   if INS_ON_TOP is set.
crossedit/CrEdit.c: Add missing code that would draw third face on a space.
include/object.h: Add INS_ON_TOP flag/define.
random_maps/exit.c: Modify code so that if the random maps leading to
   a special map are reset, they will properly link in with an already loaded
   final map (and update exit from final map back up) as needed.  Also fix
   bug in that if the final map has been reset, a new one will now be properly
   loaded.
random_maps/random_map.c:Update minimum size to be 7 (up from 6) - fixes
   bug which caused crashes when square_spiral maps of 6x6 would fail to
   generate.
random_maps/random_map.h,random_maps/room_gen_onion.c: move OPT_values from
   room_gen_onion to random_map.h since the square_spiral code uses them.
random_maps/square_spiral.c: Update call to map_gen_onion to use
   OPT_.. values instead of constant integer.
random_maps/treasure.c: Add some casts to sprintf statements to eliminate
   some compiler warnings.
server/main.c: Modify enter_exit code such that a random map has
   reset, we generate a new random map.  This can happen when the random_map
   resets before the map that leads to them resets.
MSW 2001-10-06

Add a new command category called communications commands.  Place tell, 
shout and say in here.  Also create emotion functions.  These functions 
have no real effect on the game, but make communications between players 
more colorful and fun.  They are mostly fluff.  Included with this patch 
are two new convenience functions, new_info_map_except, and 
new_info_map_except2, which allow the programmer to write to an entire 
map, except for certain individuals.

garbled 2001-09-27

Add complete processing code for luck.  This new code removes all 
previous instances of luck, and adds a few new convenience utilities.  
Now, every die roll in the game is affected by luck in some small way.  
This causes luck to be an intangible benefit to the player, without 
totally unbalancing the game.  The new functions are random_roll, 
die_roll, and rndm, which should be used in place of RANDOM() whenever
possible.

garbled 2001-09-26

This checkin mainly fixes multipart teleporters - they should now
work properly.  Also a minor fix to make the new pickup code work.
server/apply.c: apply_shop_mat rewritten to be more 'presentable'.
    Minor changes were needed in any case to pass the player/creature
    a a second object to teleport.
server/c_object.c: change the sscanf to be unsigned when getting value
    for new pickup mode.  At least on my system, if the value in the
    string was larger than the max signed value, sscanf set it to the 
    max value.
server/move.c: teleport function largely re-written.  Instead of the
    third arg being the 'originator', it is now the object to teleport.
    This allows the head of the teleporter to get passed to this function
    even if the object to teleport is not on the head.
server/time.c: move_teleporter modified to also check for objects on the
    other parts of multipart teleporters.  Also, pass the head object
    to the teleport function so that proper destination is used.
MSW 2001-09-02

Add Nils Lohner patch that new selections to the pickup mode.

include/define.h: Pickup type defines added.
include/player.h: Change mode (pickup mode) to 32 bits.
server/c_object.c: command_pickup function modified to support all
    the new pickup options.
server/player.c: Fix for path_to_player to prevent crashes.  Add check
    in move_player_attack just in case.  check_pick function modified to
    support new pickup options.  do_some_living modified to eat flesh
    items if player is starving and they don't have any food.
server/spell_effect.c: cast_detection modified so that detect magic/curse
    will not show objects beneath the floor.  Change so that detect_monster
    and detect_evil spells copy the face of what they detected - gives better
    appearance on client.
socket/item.c: fix bug LookAt that ws checking blocked_los on wrong
    offset.
MSW 2001-08-28

Enhancements to make monsters 'do the right thing' with relation
to tiled maps (ie, will detect players and attack them if on an adjoining
tiled maps).  This involved a rewrite of path_to_player - I've tested this
out, and if anything, it seems that monsters may be more aggressive on
spellcasting.
++
common/map.c: blocked modify to make sure it is checking valid coordinate
   value.  blocked_link,blocked_two modified to translate for tiled maps.
   Add load_and_link_tiled_map which loads a tiled map and links in all
   pointers relative to adjoining maps.  out_of_map modified to use
   this function instead of doing the work itself.  Add get_rangevector
   function that returns offset, direction, and distance between two
   objects, taking into account tiled maps.  get_rangevector_from_mapcoord
   added which is similar to get_rangevector, but takes a map and coordinates
   instead of a second object.  on_same_map function added which returns
   true if the two objects are on the same logical (ie tiled) maps.
doc/crossfire.doc: Add note about what Int does for monsters.
include/map.h: Add some comments, and add structure for rangevector
   function return values.
server/attack.c: add calls to on_same_map instead of doing op->map
   comparisons.
server/monster.c: Many functions modified to properly handle tiled
   maps properly.
server/pets.c: get_pet_enemy modified to know about tiled maps.
server/player.c: get_nearest_player modified to know about tiled maps.
   path_to_player rewritten to know about tiled maps - I think some other 
   bugs were also fixed in return values.  Split player_attack_door
   from move_player attack to keep functions a more reasonable size.
   move_player_attack, player_can_view modified to know about tiled
   maps.
server/skills.c: can detect_enemy modified to take another parameter -
   call in steal updated to pass this parameter.
server/spell_util.c: ok_to_put_more, can_see_monsterP modified to
   handle tiled maps properly.
socket/item.c: look_at modified to return proper results when player
   looks at something on an adjoining tiled map.
++ End of checkin

common/object.c:decrease_ob_nr modified to correctly update client when
    player uses item from container that is on the ground (bookshelf for
    example)
server/time.c: move_teleporter modified to skip over wall/floors and
    teleport whatever is above them.
MSW 2001-08-05

common/map.c: modify link_multipart_objects to preserve name and title of
    head when making the more parts.  modify update_position so that it should
    never show an invisible face to the player.
common/object.c: fix check_walk_on so that spells will now properly get
    affected by spinners and directories.
include/sockproto.h: Rebuilt to include MapNewmapCmd
server/hiscore.c: Fix crash if player savebeds map on map which does not
    have a name.  Use the path instead.
server/move.c: modify teleporter function to send MapNewmapCmd to client
    if player got teleported.  Needed for fog of war code.
server/time.c: modify move_teleporter so that it will not teleport walls.
socket/Makefile.in: Modified to use cproto to generate proto files.
MSW 2001-08-04


common/Makefile.in crossedit/Makefile.in doc/Makefile.in
doc/playbook-html/Makefile.in doc/spoiler/Makefile.in
doc/spoiler-html/Makefile.in lib/Makefile.in lib/crossfire.png
random_maps/Makefile.in socket/Makefile.in utils/Makefile.in: Fix up
so that distclean now clears out all appropriate files - MSW 2001-08-01

common/map.c free_map Set in_memory status to MAP_SWAPPED - fixed bugs of maps
    not getting reset properly
common/object.c: insert_ob_in_map - was passing wrong value to check_walk_on,
    resulting in some things not working as expected.
doc/Protocol: Clarify how the sending of the version command works.
server/move.c: move_ob redone.  It should hopefully be more efficient (only'
    remove objects after verifying they can in fact move).  IMO, code is
    also simpler, and hopefully has fewer bugs.
socket/init.c: InitConnection - modified to set faces_sent[0] to one
    so that we will never send any information about face 0 to the client.
    facecode 0 is sent in the map1 command to clear spaces/layers.
MSW 2001-07-30

Added support for the newmap cmd needed for the fog_of_war code
in the gtk client. 
include/newserver.h: added newmapcmd:1 to NewSocket struct
server/main.c: added call to MapNewmapCmd in enter_map()
socket/init.c: init code for new newmapcmd value in NewSocket
socket/request.c: deal with "newmapcmd" value in client setup string
                  Added MapNewmapCmd( player* pl) function.
SMACFIGGEN 2001-07-21


common/object.c: remove_ob - set P_NEED_UPDATE before calling update_position
to prevent warnings from update_position being called with P_NEED_UPDATE
being set.  MSW 2001-07-19

socket/request.c: Fix bug in map1 command which resulted in it sending
too much data with even maps.  For example, if the client requested
a 16x16 map, the server would effectively send a 17x17 map to the client.
MSW 2001-07-19

+++
Major redo of map code:
1) Remove encounter map support (with the much better random map code,
   I don't see much reason for it)
2) Remove map_ob from map structure, and instead store relevant information
   in map structure itself.  Remove strange meanings (stand_still meaning
   fixed reset time for example)
3) Redo internal structure of map and how information on each space was
   stored - this should make future extensions much easier, as well
   as making debugging easier.
4) Make USE_LIGHTING standard part of game.
5) Redo how lighting objects are handled - instead of making a linked list
   of the light giving objects, at field to mapspace that contains
   lightsource for the space.
6) Rewrite insert_ob_in_map to take optional parameter that determines
   other behaviour.  This replaces insert_ob_in_map_simple.
   Function now does sorting of some objects, so performance for lots of
   spell objects on one space should be much better.
7) Change how multipart objects are saved.  Now only save the head, and
   link in the rest of the parts when map is loaded.  Additional parts
   linked in are put just above floor level when linked in, so things like
   shops won't hide items that someone drops on them.  For monsters, this
   linking shouldn't be a problem - once they start moving, they will get
   relinked as normal (on top).
8) Modify update_object to only call update_position when necessary
   (ie, space attributes change).  Otherwise, let the map transmission
   code call update_position when necessary (ie, in players view) - this
   saves cpu time as time will not be spent updating spaces that no one
   will see (before, how the space looks was updated whenever a space
   had an object added or removed).

TODO: remove some things that have now been done.
common/Makefile.in: Remove ltostr.c and sqrt.c from list of files
common/ltostr.c, common/sqrt.c: Moved into porting.c
common/anim.c, common/button.c, common/item.c: Update calls to update_object
common/living.c: have fix_player calculate light value for player/monster.
common/logger.c: Remove code that has server exit if too many LOG messages
    happen too quickly.  This was not a reliable mechanism, and it should
    really be up to the functions doing the logging to know if they can
    continue or not.
common/los.c: Changes on how it deals with lighting on maps - get light
    value from map space array instead of using the linked list.  Functions
    that managed the light list have been removed.  Change logic of
    line of sight function to be more efficient (before, we may examine
    the same space multiple times).  rename update_all_los to
    update_all_map_los, and change update_all_los to take coordinates
    so that we only have clients within view of the change recalculate
    los.  Also, have update_all_los check for tiled maps that may have
    clients that need to get updated.
common/map.c: remove refresh_map - this used to be used to try to recover
   from map errors if many_cores was not set - IMO better to core and
   just restart and really fix the error than try to deal with possible
   corruption that may otherwise result.
   Move open_and_uncompress and close_and_delete functions to porting.c -
   they are 'common' functions that are not related to the map code.
   Remove some lighting related code, as that is no longer done with
   a list.  Many modifications because of new map structure.  And
   logic to load and save the new map structure format.  Modify
   many of the functions to take map tiling into account.  Change
   way multipart objects are saved, and add logic to relink objects
   when maps are loaded up.  Remove some functions that are only
   used by the editor into the editor.  Move update_position from
   object.c to map.c as it is better placed in map.c.  Modify
   function to figure out light for a space.  Make out_of_map a
   function that knows about map tiling.  New function - get_map_from_coord
   which knows about map tiling and does coordinate and map translation.
common/object.c: Have update_object take another parameter which tells
    update object what has changed about the object.  This lets the function
    know if it should call update_position right away or if it can just
    mark the space as needing an update at a later time.  move update_position
    to map.c.
    insert_ob_in_map: now takes another parameter that describes actions not
    to do. modified to know about map tiling and do appropriate translation.
    Does some object sorting so it should handle spell objects more
    efficiently.
    insert_ob_in_map_simple is now replaced by
    using appropriate flag to this changed version of insert_ob_in_map.
    Clean up remove_ob - seemed to have done things in a more complicated
    fashion that is no longer necessary.  Modify check_walk_on to look
    at all objects on space, not those below the object - with changes to 
    insert_ob_in_map, new object won't always be on top.
common/porting.c: functions from ltostr.c, sqrt.c, as open_and_uncompress
    close_and_delete, make_path_to_file from map.c
common/treasure.c: Modified to use updated insert_ob_in_map
crossedit/Attr.c: Rename Layout to AppLayout so other files can use it.
crossedit/CrEdit.c: Modified to use new map header.  Modified drawing
    routines, as face values could be null
crossedit/Edit.c: Move many functions from common/map.c that are only
   used here and thus don't need to be in common/map.c.  Modify to use
   new map structure.
crossedit/Makefile.in: Change to use cproto to make proto.h file.
crossedit/png.c: change user_read_data to be static so proto doesn't pick
   it up.
doc/Makefile.in: add map-technical to list of files.
doc/crossfire.doc: remove map information that was in this file.
doc/map-technical: new file.  Describes inner workings of how the maps work.
include/config.h: remove RANDOM_ENCOUNTERS (no longer available) and
   USE_LIGHTING (now standard part and always on).
include/define.h: move P_... values to map.h
include/global.h: add definition for compression externals, as they
    are used in a few files.  remove map macro functions - moved to map.h
    as appropriate.  Add FREE_AND_CLEAR macro that frees data and then 
    sets the pointer to NULL.
include/map.h: Largely redone - many new macros, new map structure.
include/object.h: remove lights object link pointer from objects.
    At some #defines that are the flags for update_object and
    insert_ob_in_map
include/player.h: Add a few comments.
random_maps/decor.c,random_maps/door.c, random_maps/exit.c, 
    random_maps/floor.c,random_maps/monster.c,random_maps/special.c,
    random_maps/standalone.c, random_maps/style.c,random_maps/treasure.c,
    random_maps/wall.c:
	modified to use modified insert_ob_in_map function, 
	use new macros to access map structure related data
server/Makefile.in: Remove encounter.c file.  Use cproto instead of
    cextract to create proto file.
server/alchemy.c,server/attack.c,server/c_object.c,server/c_wiz.c,
    server/disease.c, server/login.c, server/main.c, server/monster.c,
    server/move.c, server/pets.c, server/player.c, server/resurrection.c,
    server/rune.c, server/shop.c,server/skill_util.c, server/skills.c,
    server/spell_effect.c, server/spell_util.c, server/swap.c, server/time.c
	modified to use modified insert_ob_in_map function, 
	use new macros to access map structure related data.
	change calls to update_all_los, remove lighting related code.
server/apply.c: modified to use new insert_ob_in_map function.  Update
    calls to update_object.  remove RANDOM_ENCOUNTER code.
    for exits, modified to use the head for valid coordinates since the
    other parts may not have valid values since they are not saved out to
    disk anymore.
server/c_misc.c,server/hiscore.c: modified to use new map 
    structure/information. 
server/commands.c: remove dumplights command.
server/encounter.c: removed - code no longer used
server/init.c: remove RANDOM_ENCOUNTERS code.
server/script.c: change Script_getMapObject to return NULL since there
    is no longer a map object.  Modify to use new insert_ob_in_map and
    update_object functions.
socket/info.c: Modified to use new map structure/macros
socket/request.c: Modify draw_map_routines to use get_map_from_coord so
    that it properly deals with tiled maps.  Modified to deal
    with potentially NULL face values.  Modified update routine to
    call update_position for spaces within player view which need an
    update
MSW 2001-07-13
+++


common/object.c, common/player.c, include/object.h, server/skill_util.c:
      Remove the unused LINKED_SKILL code.
common/Makefile.in: Use cproto to make prototypes - cextract fails for
   some reason and now seems unsupported.  Cproto generates a bunch
   of warnings, but does do the job.
common/arch.c,server/apply.c, server/main.c, server/monster.c: cleanup some
     compile warnings (unusued variables, returns without value
doc/playbook/Makefile.in: Create proper dependencies for files.
doc/playbook/treas2-extract: Add player_force to value to ignore.
doc/spoiler-html/spoiler.html: rebuilt
server/skill_util.c: Remove the unused LINKED_SKILL code.  Prevent
   characters that have meditation skill from learning melee weapon skill.
MSW 2001-06-28

doc/Protocol: Add 'darkness' setup option documentation.
include/newserver.h: add darkness element to socket structure.
include/script.h,server/script.c: remove static declaration from script.h,
	move it to script.c
socket/init.c: init darkness element in socket structure.
socket/request.c: Add support in setup command for client to set if it
    wants darkness information or not.  Modify map update functions such
    that if the client does want darkness information, server does not
    send it.  Improve darkness handling so that if using the map1
    protocol command, send darkness for first blocked space due to
    darkness - this makes it possible for client to interpolate results
    better.
MSW 2001-06-16

common/item.c: Add boots and gloves to items which are not magical just
    because they have resist physical.  This bug resulted in most all boots
    and gloves being shown as magical, even though they had no special
    properties.
socket/request.c: remove some dead code.  Memset entire map cell
    to zero when scrolling and the map is cells is one that was not in
    view.  This fixes redraw problems when using large viewable maps.
MSW 2001-06-11

doc/Protocol: update information for the mapcmd, add map1cmd to
   section of setup commands.
include/newserver.h,socket/init.c: add map1cmd element to socket structure that
    determines which protocol (map,map1) will be used for sending the
    map.
socket/request.c:add 'map1cmd' to list of setup options.  when sending
    the map, use the map1cmd element to determine what protocol command
    to use to send it.
MSW 2001-06-07

server/shop.c: Fix bug that resulted in items in shop being paid,
as well as not generating proper listing.  MSW 2001-06-06.

Checkin of code that supports larger map sizes (configurable in
config.h).
common/los.c: update los code since it only handled 11x11 maps.  Now
    uses formulatic approach so any map size should be supported.  This
    does result in a few more spaces getting blocked around corners,
    but it doesn't seem that bad - certainly not compared to the ability
    to have larger viewable maps.
common/map.c, crossedit/CrEdit.c, crossedit/Edit.c, include/global.h, 
    include/map.h,random_maps/monster.c,random_maps/special.c,
    random_maps/standalone.c, server/apply.c,server/c_misc.c,
    server/spell_effect.c,socket/info.c:
    change mapx,mapy to what they really point to,
    as it prevented using those as variable/structure element names.
common/object.c: update_position - if faces for different layers are
    duplicate, set the duplicates to be blank to increase client
    update efficiency.
doc/Protocol: Add map1 command description, update setup command to
    describe setting of mapsize.
include/config.h: add MAP_CLIENT_X/Y to set maximum map size we can
    send to the client.
include/newserver.h: add mapx, mapy values to socket structure
include/player.h: Use MAP_CLIENT_X/Y for sizing arrays that hold
    map related information in player structure.
server/player.c: As per player.h above, use appropriate sizing when
    initializing player stucture.
server/shop.c: Update mapx,mapy like above, but re-do shop listings code as
     it was doing a lot more work than necessarily (I think some changes
     got put in for sorting, and the old object manipulation was never
     removed when that got done)
socket/init.c: set default client map size to 11x11 in the socket.
socket/item.c: LookAt - change checks for position checking (such that
     you can only look at things in bounds) use max viewable map size.
socket/request.c: Make setup commands a little more forgiving if there are
     extra spaces.  Add 'mapsize' command to setup command.  Update
     old map sending code to use socket map sizes (to support even
     smaller than normal maps, or 13x13 or 15x15 maps).  add draw_client_map1
     command which implements the map1 protocol command.
MSW 2001-06-03

random_maps/treasure.c, wall.c:  fix a problem where hidden doors
surrounding a treasure could destroy exits.  --PeterM 5/31/2001

Make ALLOW_SKILLS standard part of game (remove #ifdef's for it)
Files affected: common/living.c common/object.c common/treasure.c
    include/config.h include/player.h server/apply.c server/attack.c
    server/c_move.c server/c_range.c server/c_wiz.c server/commands.c
    server/init.c server/login.c server/monster.c server/player.c
    server/rune.c server/skill_util.c server/spell_util.c
Make MULTIPLE_GODS standards part of game (remove #ifdefs for it)
Files affected: common/readable.c include/spellist.h include/config.h
    server/attack.c server/gods.c server/skills.c server/spell_effect.c
    server/spell_util.c
doc/Makefile.in, doc/Protocol: Add protocol description file here instead
   of in the client distribution. 
include/global.h: Move declaration of MAX_EXP_CAT near top of file
   so it is set before player.h is included.
include/newclient.h: Add CS_STAT_SKILL* values for sending skill
   experience information to client.
include/newserver.h: Add skillexp value to socket struct which determines
   if client wants skill experience informatiion.
include/player.h: Add skill information tracking to player structure
   so we can easily know when to send updates to client.
random_maps/expand2x.c: remove unused variable to prevent compiler warnings.
random_maps/square_spiral.c: Include prototype information on all systems,
   not just win32 to prevent compiler warnings.
server/skill_util.c: Initialize skill pointers to make it easier to
   find skill information when we want to update client.
socket/init.c: Init socket->skillexp to 0.
socket/loop.c: Fix indentation of table - whitespace change only
socket/metaserver.c: Minor fix to prevent compile warnings (on the sprintf
    that composes the data to send to the metaserver)
socket/request.c: Redo SetUp function to be more compact and IMO simpler as
   wll as easier to read (functionality remains the same).
   VersionCmd modified to warn users of on dxclients (code on MT)
   StatsCmd added to send skill information if client wants it.
The sending of skill experience is by MT, rest of the changes by me.
MSW 2001-05-28

common/readable.c: When making recipe books, give the recipe that they
   are for in the title.  Makes it more worthwhile to buy them.
lib/treasures.c: Increase the chance of readables in chests some (in fact,
   add a chance.)
MSW 2001-05-25

lib/artifacts: Reduce potency of Poison artifact foods.
server/apply.c: When eating poison artifact foods, hit player with poison
    attacktype instead of just subtracting hp.  This way people with
    poison resistance get proper benefit.  MSW 2001-05-24

doc/metaserver, doc/Makefile.in: Add metaserver file which describes
    working of metaserver and format of data fields.
socket/metaserver.c: Add reporting of inbytes, output bytes, and uptime in
    seconds to notification of metaserver
MSW 2001-05-24

server/player.c
common/living.c
include/libproto.h:  New experience loss on death policy implemented.
(As per consensus.)  3 levels or 20%, whichever is less.  
  --PeterM 5/24/2001

server/spell_util.c: Fix typo in polymorph code (when enabled in config.h)
MSW 2001-05-24

server/disease.c: replace disease->owner check with get_owner.
MSW 2001-05-24

server/pets.c: pet_move - fix formatting to be 4 space indentation.
   if we remove the monster, free it here instead of having move_monster
   do it.  Add check for was_destroyed after first call to move_ob -
   crashes have been observed in that function, and I believe that is the
   cause.
server/monster.c: move_monster: let pet_move free the pet if necessary.
server/spell_effect.c: Clear sleeping flag of monsters when casting
   summon pet monster (or other creatures).  Some archs have this 
   value on by default, so the monsters don't follow the player until
   an enemy is found.
MSW 2001-05-22

socket/item.c: Don't raise player to top of stack when they look at
   something.  I think this may be causing server crashes in some
   circumstances - plus its not really needed anyways.
socket/loop.c: block_until_new_connections: Add call to flush_old_maps
   so maps are reset while waiting for a new player.
MSW 2001-05-22

configure.in, configure: Fix png and Xpm library detection.  Suggested
patch by Yann Chackhoff, applied by MSW 2001-05-20


------------------------------------------------------------------------------
Changes for 1.0.0:

common/living.c: Fix AC wrapping problem - now limit ac to +/- 120.
MSW 2001-05-12

include/config.h: Add NO_POLYMORPH feature selection
include/spellist.h: If NO_POLYMORPH is set, make it so that polymorph will
   not show up in wands/rods
server/spell_util.c: Handling for NO_POLYMORPH selection
MSW 2001-05-11

server/rune.c: Make sure rune message is newline terminated.  Fix map
corruption problem.  MSW 2001-05-10

Various improvements to make finding memory leaks easier.
common/anim.c: Add free_all_anim function
common/arch.c: Modify free_all_arch to free more data
common/init.c: If running under MEMORY_DEBUG, don't pre-allocate objects.
common/map.c: Add free_all_maps functiion.
common/object.c: Modify object allocations if using MEMORY_DEBUG to only
   malloc one object at a time, and not pre-allocate objects.
common/readable.c: Fix memory leak.
common/shstr.c: Include autoconf.h so it can pull in dmalloc.h file.
include/config.h: Remove notes of what was removed a long time ago.
  Add MEMORY_DEBUG option.
include/libproto.h, include/sockproto.h, include/sproto.h: automatic rebuild
server/c_misc.c: Fix 'malloc info command so it reports right memory total
   for maps.  Add command_style_map_info which sums up memory used by
   style maps.
server/commands.c: Add style_info wiz command which dumps memory usage
   for style maps.
server/init.c: Have sighup handler call cleanup function.
server/main.c: Fix clean_tmp_files which could result in crash if one
   of the maps in memory has 0 reset time.  Modify cleanup function
   to free more data.
server/player.c: op_on_battleground: Fix compile warning about unuused variable.
socket/init.c: Change name of free_all_ericserver to free_all_newserver,
   have it free all face data.
MSW 2001-05-08

socket/item.c: Modify look_at to not stop when it finds the first invisible
   object.
server/monster.c: Modify  monster_check_pickup to check to see if the
   next object got destroyed.  I'm not sure the exact way this happens,
   but I've seen one crash where this did happen - I'm guess some
   function further down in the monster_check_apply look may call
   this or destroy the item.
MSW 2001-05-01

common/object.c: Add clear_owner function.
include/libproto.h: rebuild.
server/player.c: Modify op_on_battleground to look for battleground
    anyplace on space.  Temp for for wall of thorns on space - as long
    as maps don't try to abuse the use of battlegrounds, should be OK.
server/time.c: Add clear_owner call to stop_arrow.  Fixes problem of
    thrown objects not getting saved.
MSW 2001-04-28

common/object.c: Have update_object map the look window for redraw if
   the object is not something the client normally animates (like a lever).
   MSW 2001-04-27

server/apply.c: Modify apply_id_altar check for player - had a && instead of
    a ||.
socket/item.c: Modify ApplyCmd so a removed player can not apply objects.
   Fix crashes caused by players applying savebeds after they have
   used the bed.  MSW 2001-04-26

server/spell_util.c: have put_a_monster generate random monster
   abilities.
TODO, doc/mapguide: Various minor updates.
MSW 2001-04-25

server/c_object.c: Pass right object to query_cost_string so that
   if you pick up an unpaid object into a container, it generates
   the correct price.  MSW 2001-04-22
server/c_wiz.c: fix shutdown and reset_map wizard commands/function
   so they no longer crash the server.  MSW 2001-04-22

server/monster.c: add check to was_destroyed when monster fires an
   arrow.  Call was certainly missing, and appears to be responsible for
   crash.  MSW 2001-04-20

server/player.c: Clear op->chosen_skill when we get to the play_again
   prompt.  Otherwise, the server may try to use this later on, and it
   no longer points to a valid object, so it results in a crash.
   MSW 2001-04-19

server/skill_util.c: Add missing call to out_of_map in skill_attack which
  could result in crashes if player is at edge of maps and decides to attack
  in direction off map.  MSW 2001-04-18

server/attack.c: Remove error message about golem without owners,
   also add better checking before clering the op->contr->golem field.
common/map.c: set status flag on maps to MAP_SAVING so remove_ob does
   not do extra work when we are deleting a map (ie, immediate reset)
   from emory.
server/skills.c: If someone is stolen from a player, send an esrv_delete_item
   to the client so the clients inventory remains correct.
MSW 2001-04-16

common/re-cmp.c: Modify re_cmp functiion so that it properly matches
  strings not at the start 'ie, dude chain will now match against
  the chain value'. 
server/monster.c: Properly alter direction monster moves if they are
  feared or confused.  It was properly altering direction when monsters
  were using range attacks, but not if they were just wanting to move.
MSW 2001-04-12

common/living.c: Don't use the last_heal object in experience objects as 
   sp regen penalty.  This should fix the problem of inconsistent sp regen
   rates - last_heal is used in experience objects if the permanent experience
   option is turned on.  MSW 2001-04-11

PeterM:  
server/spell_util.c:  fix peace so it gives experience
common/button.c:  change the "error" to a "debug" message
   to reduce server crashing.

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

Changes for 0.98.0:

server/skills.c: Modify inscription so that when inscribing cleric spells,
    it reduces grace.  Before, reduced mana no matter the type of spell.
server/c_object.c: Fix bug in pick_up where it was not using the right
   count for picking up objects if the player did not specify one.  This
   allowed players to put objects into containers that should not really
   fit.
server/player.c:  Don't let players shoot arrows at themself.  Also,
   minor changes to use new_draw_info_format.
server/swap.c: If recycle temp maps, don't save out random maps to
   get recycled.  MSW 2001/04/07

PeterM  2001/04/06:  
include/libproto.h common/object.c server/apply.c server/spell_util.c
Added a new function:  instead of stacking many burnout or firetrail
objects, only 1 per square is added.  Real reduction in server overhead.
No reduction in cosmetic effect.

common/porting.c: Fix compile warnings/bugs introduced by Win32 changes.
server/time.c: Modify move_player_mover so that it determines direction
   of the mover and then process accordingly, as well as formatting
   changes.
server/c_object.c: modify examine so that it properly shows info about
    magic bullet spell books.  MSW 2001-04-05

common/item.c: Modify identify function to clear the NO_SKILL_IDENT
   flag so objects will now merge.  Also, once the object has been
   identified, the no_skill_ident doesn't have meaning anymore.
   MSW 2001-04-03

server/c_object:  Modify examine command to only be able to examine
   valid objects, and not whatever is on top of the space, which may be
   insivisible.  MSW 2001-04-01

include/sproto.h, server/c_wiz.c server/main.c server/player.c socket/loop.c:
Modify leave function to take a second parameter that determines if it
should print a message about the player leaving the game or not.  Proper
use of this prevents duplicate XXX left the game messages.  MSW 2001-03-29

common/image.c, include/define.h, include/global.h: Add empty_face structure
   and appropriate code to initialize it.  This is used for the server side
   look selection.
include/newserver.h: Add NUM_LOOK_OBJECTS to control number of look objects
   to send at any one time.  add look_position field to the newsocket
   structure.
server/move.c: clear look position as player moves.
server/player.c: initalize look_position element in structure.
socket/item.c: modify esrv_draw_look to sne NUM_LOOK_OBJECTS at any one
   time, and to also send pseudo objects that lets the player scroll up and down.
   modify ApplyCmd so that if it detects the application of one pseudo objects
   to adjust the look_position.
MSW 2001-03-29

common/readable.c: Name spellbooks based on level of spell, and not
    just randomly.  Patch by Preston Crow, applied by Mark Wedel 2001-03-29

configure, configure.in, include/autoconf.h, includes.h: add check for
   time.h and include it if we find it.
socket/item.c: esrv_move_object - have it check to see if the object is
   already on the ground before we try to re-drop it.  Likewise, check
   to see if it is already in players inventory before we try to pick
   it up.
common/object.c: Don't send face updates to the client or make
   the space as needing to be redrawn.  Client now deals with animation 
   of the look window on its own. 
utils/(metaserver.pl crossloop add_throw.perl crossloop.pl) 
lib/(Makefie.in, checkarch.pl collect.pl xpmtopix.pl) - - deleted
   from CVS - '.in' versions of these files now exist and the real
   versions are created as part of the configure process.  Update 
   Makefile.in to reflect this change.
MSW 2001/03/28

common/object.c: have update_position just update the flag that the
   server needs to send the look window to the client and don't send the
   item at this point, as sending the look will do that.
server/main.c: process_players1: Remove call to draw (which updates
   the client map) - the handle newclient in socket/loop.c already
   does this and there is no reason to send multiple instances of the
   same map.
MSW 2001/03/23

server/c_object.c: drop_object function: send delete item to client as
   item is dropped.  This fixes a problem of phantom objects in the
   inventory.  Unrelated change to not call esrv_send_item for objects
   that are dropped - esrv_draw_look will get called later on and will
   update this at that time.  MSW 2001/03/23

server/c_object.c: Update the return value for some matches - they
   function was returning immediately when it got a match, but did not give
   them a high match value, so searching for 'key ring' used to return a
   match value of 6 or so on the key ring, but a 14 on a key.

common/object.c: Modify find_free_spot to call arch_out_of_map so that
   it properly deals with multipart objects.
server/main.c: Fix enter_map so that we first use the golem (and not player)
   when calling find_free_spot.  Also, modify code so that it properly
   updates coordinates of the multipart golem.
MSW 2001/03/20

server/skills.c: Fix orate so that we check for a positive chance (and just
not nonzero chance) for successful oration.  Due to adjustments, at low levels,
the oratory chance can be negative.  MSW 2001/03/20

server/spell_effect.c: Change cast_change_attr to find an enemy (and not
friend) when casting the curse spell.  MSW 2001/03/20

server/apply.c: Increase size of buf to be a HUGE_BUF to very
long item names don't cause a stack overflow.  MSW 2001/03/20

common/object.c: Modify update_position so that we don't show invisible
players to other players.  MSW 2001/03/20

------------------------------------------------------------------------------
Changes for 0.97.0:

MSW 2001/03/18:
common/init.c: add RESET_LOCATION_TIME initializer to settings structure.
include/config.h: Add RESET_LOCATION_TIME value.  If nonzero and the save was longer than 
    the specified time in seconds, player will be returned home upon login from
    save.
include/global.h: Add reset_loc_time field to settings structure.
server/login.c: Remove some unused variables, add support to return player
   home as described above.
server/spell_effect.c: Fix for crashes when casting control undead and your
   god does not have an enemy.  Now properly check to make sure we are not
   dereferencing null pointers.


MSW 2001/03/16:
Change code so that if player dies and loading the players savebed map does
not work, return player to EMERGENCY_MAPPATH instead.  New function added
to server/main.c called enter_player_savebed which does the work,
Files changed: include/sproto.h server/main.c server/player.c
    server/spell_effect.c (comment added)
Unrelated change: Remove messages about multiple resist types set.
Files changed: common/loader.l common/loader.c

MSW 2001/03/15:
server/spell_effect.c: Add physical attacktype when casting holy possession.
    Otherwise, characters who use karate end up not being able to damaage
     anything.

MSW 2001/03/09:
crossedit/App.c: Move the loading of images to later in the editor
    startup state.  In this way, the client can allocate the colors it
    needs for its windows before the the png images use up all the colors.
crossedit/png.c: New png loader implementation.  New version is much
   faster (50 times faster).  As part of this, only 8 bit displays,
   a private colormap will be allocated, and after that gets filled
   up, a color mapping routine will be used - this makes the png
   images loadable on an 8 bit system in addition to the speedup.
crossedit/xutil.c: Adding timing information for loading of images.
   call init_pngx_loader before starting to load png images.  Pass
   colormap to png_to_xpixmap by pointer and not value so that
   the loader can change the colormap.

AV 2001/03/09:
common/button.c: Added new attribute to altar triggers: "last_sp 1".
    If set, the altar trigger will push the connected value only
    by dropping the sacrifice, NOT by altar reset. If unset ("last_sp 0")
    it will work like it used to (push by sacrifice and by reset).

MSW 2001/03/06:
server/spell_effect.c: Fix message when consecration fails - use the ob->name
    field and not the ob->title field.  Also fix broken logic that checked
    for the floor.
server/init.c: Related to 3-4 change which changed the default name of
    the logfile to "" so we know to use stderr.  This doesn't work for
    daemon mode, so if the name is "", we use the default logfile instead.

MSW 2001/03/04:
TODO: add re-connecting player to new client if client logs in with
    right name/password.
common/init.c: Open up the logfile with the provide filename when given
    the -log option.
server/init.c: Make set_logfile a first pass option so the init_library
    has the right logfile name to work with.
server/main.c: Fix crash if map has an exit path yet that file does not
    exist.  Give proper error message.


MSW 2001/03/01:
server/main.c: Modified random_map code so the server will not
     crash if the exit object has no message (and thus variables to set
     for the random map).
     Modified so that golems move away from player when player
     changes map.  Values were reversed before, causing the golem to move
     towards the player.

MSW 2001/02/25: General player login cleanup.  This should fix the crash
    when players re-roll stats too often.  So far, it also seems to
    have the additional effect that calculated players on map now appears
    to be correct.
common/player.c: No longer allocate the player object structure in
    get_player_ob (function is really misnamed).  Callers to this function
    were not using the allocated function.
server/login.c: Add leave_map call when player is loaded.
server/main.c: Add leave_map function.
server/player.c: Move get_player function to start of file - can declare
    it static that way.  Move some initialize from add_player to get_player.
    Add set_first_map function.  Add appropriate calls to leave_map
    and set_first_map when players join and leaves the game.

MSW 2001/02/22:
TODO: Add some items, remove some others, remove outline of future versions,
    since it was out of date.
common/loader.l,loader.c: Declare msgbuf a static outside the lex_load function.
    lex_load was otherwise clearing it each time it was called, which resulted
    in empty messages for the random artifacts (since the call lex_load one
    line at a time).  Instead, we just zero this at start of load_object.
    Original reason of this change was due to purify errors - as I look at the
    code, it appears even before these changes that it was clearing the buffer
    properly.
common/map.c: removing pending field from map objects.
common/re-cmp.c: Comment out some code which was resulting in too many
    false compares.
include/config.h: increase default for MAX_OBJECTS.  6000 is a bit small
    on current systems.
include/map.h: Remove pending field from map structure.
random_maps/treasure.c: Increase size of doorlist.  Fixes crash, in that
    if a random map could place 8 doors around the treasure, the list
    was not terminated, so the problem would eventually try to read/dereference
    random memory after the array.
server/c_misc.c: Remove pending field from maps, so remove functions
    and other places that referred to it (like the maps command)
server/c_wiz.c: fix up wiz map reset command.  Not really tested, but
    old code had some definate problems just from visual inspection.
server/main.c: Further fix for unique exits - relative paths to unique maps
    from non unique maps should now work.
server/monster.c: Various fixes - one is that should get more reliable distance
    values for multipart monsters.  Second, modify dist_att to calculate from
    closest part of monster, and not the head of the monster.
server/pets.c: Remove code dealing with pending objects.
server/player.c: Don't remove invisible objects in players inventory when
    playing with permadeath mode.
server/spell_util.c: If you try to cast denied spell, it no longer costs any
    spellpoints.
socket/item.c: Fix bug where it was using 'item' protocol command instead of
    'item1'
End of MSW 2001/02/22 checkin.

------------------------------------------------------------------------------
Changes for 0.96.0:

MSW 2001/01/11:
include/rproto.h: Rebuilt for new random map code.
server/player.c: remove player insert in key_roll_stat - player is already
    inserted.
server/swap.c: When swapping out map, see if it has already reached reset time,
    and if so, just delete it and not save it.  In flush_old_maps, now have
    it check for maps that have no timeout set - this sometimes happens when
    players save/die on maps.


MSW 2001/01/11:
Other than various general cleanups, the main change this code does is
that style maps (for random maps) get loaded special now - they objects
they contain are not put on the active list, and they use a private map
list so they do not appear in the output of the 'maps command.
common/arch.c, common/treasure.c,server/login.c: Update calls to load_object
common/loaderl.l,loader.c: Update lex_load to take an optional flags option.
    This is currently only used so that the loader can decide if it should
    call update_ob_speedto put objects on the active list or not.
    Calls to lex_load updated.  load_object modified to take another option
common.map.c: remove PROCESS_WHILE_LOADING and CHECK_ACTIVE_MAPS ifdefs.
    update calls to load_object.  Remove some dead code.
include/config.h: Remove CHECK_ACTIVE_MAPS and PROCESS_WHILE_LOADING flags.
    Those options did not work, and in all likelihood, this would be done
    via threading now days and not what code was there.
include/libproto.h, sproto.h: updated or various function changes.
include/map.h: Add MAP_STYLE flag.
random_maps/exit.c: Call set_map_timeout after we load the final map
    so it will get swapped out.
random_maps/standalone.c: Add dummy set_map_timeout function so it compiles.
random_maps/style.c: Add load_style_map function which does the job of
    actually checking to see if a style map is in memory, and if not,
    loads it up.  Updates the pointers so it appears on a map style map list
    and not the general map list.
server/main.c: create set_map_timeout function that deals with setting the
    map timeouts.  Fix bug so server doesn't crash if two players kill each
    other on hall of selection.
server/monster.c remove dead code.
socket/loop.c: If realloc fails, catch it and exit with meaningful
    error message.
End of MSW 2001/02/11 checkin.

MSW 2001/02/08:
server/login.c:Fix that would prevent maps from getting swapped out properly -
we would try to swap out a map the player is in the process of leaving - move
swap out code until after we have moved the player to the new map.  MSW
2001-02-08


MSW 2001/02/06:
common/porting.c: relocate clean_path from this file to server/main.c
server/main.c: relocate clean_path from porting.c.  Add unclean_path.
    Modify enter_unique_exit so it supports relative maps on unique maps.
    Modify enter_exit so word of recall (or other forcelike fields), work
    when the return point is a swapped out unique map.

MSW 2001/02/05:
server/attack.c: Fix blind and paralyze - logic for reducing duration was
   broken, resulting in zero duration for most characters.  It should now
   work properly, reducing according to the amount of protection.


MSW 2001/02/02:
common/item.c: Don't have armour item types get returned as magical if they
    have an armour value - that is to be expected. This eliminates the false
    positives that you otherwise get on armor when you cast detect magic.
include/newserver/h: and checksum field to FaceInfo struct.  Update
    version_sc to 1026.
socket/init.c: calculate image checksums as we load the images.
socket/request.c: If client is at least version_Sc 1026, use face1 protocol
    command that includes the checksum.

MSW 2001/01/31:
common/object.c: Fix that that spells cast on spaces with no floors get 
    set properly after the spell expires.
common/player.c: Use skill tools first (lockpicks, talismans, etc) before
    using native skills.  In this way, an object with bonus automatically
    gets used.
common/living.c:  Fix so that negative con bonuses work properly - fixes
    bug where a higher con could result in lower total hp due to improper
    calculation.

MSW 2001/01/30:
Complete rewrite of the exit handling code.  Hopefully as an effect, this will
fix the player appearing in the middle of the oceans.  I think the code
should also work better in many other areas.  Main enhancements is a 3x3
area for pets to follow player to new map, as well as golems now following
players to the new maps.
include/sproto.h, random_maps/rproto.h - rebuilt.
random_maps/random_map.c: Change generate_random_map to take a structure 
    with the random map paremeters.
random_maps/reader.l, reader.c: Add set_random_map_variable function that
    reads the map parameters from a char buffer.  Also, remove some leftover
    comments that were from the common/loader.l file.
random_maps/rogue_layout.c: Change some functions to be static so make proto
    doesn't collect them.
random_maps/standalone.c: Add opening of parms file into main function since
    it ws removed from the random_map.c file.
server/apply.c: Don't display the message of random maps to the players
    as they enter them, as this message is random map parameters, and not
    a real message.
server/login.c: #if 0 out using of the player loading element in the structure.
    this isn't used right now.
server/main.c: Bulk of the changes.  main changes are to break apart the
    old enter_exit function into smaller functions that more logically do
    the needed function (random maps, unique maps, and transferring the player
    to the new map).  random map code now passes the parameters via
    structure instead of file in /tmp.  Code is much more understandable now
    and hopefully bugfree.
server/pets.c: minor changes/bugfixes.  Search full SIZEOFFREE array, use
    real owner variable when print out messages.
server/player.c: Remove usage of the loading variable in the player structure.
End of MSW 2001/01/30 checking.

MSW 2001/01/23:
Various cleanups/fixes as detected by purify:
common/anim.c: animation[0] was given a null pointer as the name, but
	bsearch/or comparison function will try to de-reference it.
	Give it a unique name.
common/loader.l: msgbuf was being used initialized in the main loading
	function.  loader.c also regenerated.
common/object.c: find_free functions were not checking to see if the
	spaces they were examining were out of the map.  Added checks
	to do so.
server/apply.c: buf was being used uninitialized in the function.
socket/init.c: input buffer needs to be initialized as we do a 
	strncasecmp against the buffer which may not have any data in it.


MSW 2001/01/18:
server/skill_util.c: add change_skill_to_skill function to be used when
   we already know the skill object we want to use.  This is more efficient
   than change_skill which takes a skill number and then searches the
   inventory for the object.
   remove extra esrv_send_item from do_skill_attack - don't need to send
   skills to player.
   do_skill_attack: remove call to hth_damage - that function does not take
   into account objects in the player inventory that increase damage,
   and since that is called each attack, it is not feasible to have it
   search the players inventory.  Instead, we just rely on damage generated
   by fix_player - only think hth_damage did was adjust damage based on
   level difference.

PeterM 2001/01/16
Added randomly-generated nethack-style maps to crossfire's
random map generator.

MSW 2001/01/15:
Change blindness and paralyze so that duration is reduced based on protection
the player has. file server/attack.c

MSW 2001/01/15:
Various fixes for friendly object code:
common/button.c: Add missing call to remove_friendly_object
common/friend.c: Pretty much completely re-written.  add_friendly_object now
    checks to make sure the object being added isn't already on the list,
    remove_friendly_object will remove objects whose tags don't match,
    and added clean_friendly_list.
common/object.c:  No reason to use the function pointer to
    remove_friendly_object since that function is in the lib.
common/time.c: Make DEBUG_TIME always on (no longer compile time option).
    other areas use the global var pticks, so if it was turned off, compile
    would break anyways.
common/treasuer.c: No longer print debug messages on artifacts created.
    Cluttered log file making it hard to see more important errors.
include/config.h: Remove DEBUG_TIME define.
include/libproto.h: Rebuilt for clean_friendly_list function.
server/main.c: rewrote do_specials to do things based on pticks variable.
    This allows various specials to be spread out across multiple ticks
    easier.  Also, added clean_friendly_function to part of what this does.
server/skills.c: add missing call to remove_friendly_object.  Also, removed
    from #if 0 .. #else .. #endif code.
End of MSW 2000/01/15 checkin.

PeterM 2001/01/08:  Wrathful Eye spell implemented.

MSW 2000/12/26:
Checkin of Jan's new god intervention code.  I haven't played around with
it much, but I haven't seen any really obvious problems.
common/living.c: remove learn_prayer_chance
common/treasure.c: Various changes to treasure generation - mostly to
    deal with starting equipment and putting it in the inventory.
doc/crossfire.doc: Update docs on god intervention.
include/define.h: GT_... flags removed.
include/treasure.h: GT_... flags added.  Addition flags added from
    what was in define.h before.
lib/archetypes, lib/crossfire.png, lib/treasures: Updated with new
    archetypes and treasures.
random_maps/standalone.c,server/rune.c,server/time.c: Calls to 
    create_treasure updated
server/apply.c:  New functions for god intervention added, update calls
     to create_treasure, other god related changes.
server/c_wiz.c: Calls to create_treasure updated, various functions to
    allow DM's to learn/unlearn spells added.
server/commands.c: Various commands added to the wiz set of commands.
    See commen for c_wiz.c
server/disease.c: Changes to reduce_symptoms
server/gods.c: Numerous updates for god intervention code.
server/player.c: Modifications for starting player equipment.
server/skill_util.c: Display the god the character worships when they
     issue the skills command.
server/skills.c: Minor cosmetic change made to message when praying on altar.
server/spell_effect.c: Changes related to gods, cure spells, and
     generation of treasures & items.
End of MSW 2000/12/26 checkin.


MSW 2000/12/23:
include/define.h: Add SIZEOFFREE1 and SIZEOFFREE2 values to use instead of
    arbitrary constants in the code.
server/monster.c: change communicate function to use above values.  Before
    it was stopping one short of the full 2 space array, so one particular
    space (-1, -2 relative to player) would not hear players speech.
server/attack.c:  Don't exit hit_player function if damage is reduced to 0
    in magical attacks.  This was preventing face of death and probably a lot
    of effect only spells from working.
server/spell_util.c: modify check_cone_push to use move_object to blow
    the objects.  Before, multisquare monsters were getting sliced
    into their individual components - move_object deals with multisquare objects
    properly.

PeterM 2000/12/18:  Re-add the conflict spell (various files)
attack.c:  fix a bug which could easily have led to seg fault,
          and did when I was testing under efence.

MSW 2000/12/17: Various changes.  Note that the scope of files in this checkin
make it appear that a lot was changed, but in fact it was mostly just
re-orginization - very little code has actually changed.
include/autoconf.h.in: Add HAVE_LIBDES to file.
include/config.h: Remove comments after defines for MAP_MIN/MAX timeouts.
	This just removes some warnings during compile.  comments are now
	on lines by themselves.
include/player.h: remove shootstrength for player structure.  It was unused.
server/Makefile.in: remove input.c file, add c_range.c file.
server/c_chat.c: remove command_last, add command_shout and command_tell
	from input.c to this file.  Also fix bug in command tell which
	would let players crash server at will.
server/c_misc.c,server/c_object.c: Relocate many functions
	 from input.c into these files.
server/c_move.c, server/c_new.c: Add standard crossfire banner comment.
server/c_range.c: New file - contains range related commands, 
	including spell casting (relocated from input.c)
server/c_wiz.c: move command_invisible from input.c into this file.
server/commands.c: Remove unused commands (bell, last, strength)
server/input.c: removed file.
server/main.c: Change HAVE_DES_H to HAVE_LIBDES
server/player.c: When choosing a race, draw it facing south for best
	presentation of image.
server/spell_util.c: Remove dead code (#if 0 shootstrength related
	code)
socket/loop.c: remove unused variables.
NOTE: Due to the addition/removal of files, you will need to do
'config.status; make depend; make' from the top level directory for
everything to be compiled properly.
End of MSW 2000/12/17 checkin.


PeterM:  2000/12/17: Various problems fixed in
random_maps/*.c:  endless loop removed,
exit leading to blocked area of spiral fixed.


PeterM:  2000/12/17: Stat max bug fixed.  
server/apply.c


MSW 2000/12/16:
server/player.c: If the player race archetype has a message, print that out.
	This allows a descriptive message about what the different races will
	get.  The message is removed from the player once they decide on the
	race.
common/living.c:  Add some parens around some PR resistant checks - eliminates
	warnings from gcc.
server/disease.c: have cure_disease remove all diseases a player is infected
	with.  The code suggested it was attempting to do so, and the
	messages it printed out certainly suggested that the character
	was disease free.


PeterM:  2000/12/14:  Added spiral map layout

PeterM:  2000/12/14:
Restructuring of the random map code.  Functionally, it
should be identical.  All global variables moved into the
functions.

MSW 2000/12/10:
utils/metaserver.pl: Various improvements.  Main one is that tcp
connections to port 13326 of the metaserver will dump the information
in a easily parsable format for the client or other applications.
include/config.h: Set ARCHTABLE size to correct value.
server/player.c: Have server send update item to client for players face
	while select class.  Added esrv_new_player in Roll_Again, because
	without it, the client had yet to receive information on what tag
	the player was so could not make sense of the updated face.
server/spell_effect.c: Balance issues for polymorph.  Reduce maximum
	value for high valued objects, remove ability to polymorph generators,
	put maximum level on polymorphed monsters and give them saving
	throws against the effects.

MSW 2000/12/5:
server/player.c: Move location of where it sets the player has_hit variable
until after we have confirmed that the player has actually attacked a monster
and not that the space is blocked.  Fixes various problems and make
behaviour more predictable.
common/button.c: Do not set path_attuned when loading connected objects from within
the editor.  This is normally done for random map code/glue logic.
common/player.c: When trying to find a skill to use, use a native skill
first before going off and returning a skill object like a talisman.

MSW 2000/12/4:
common/treasure.c: Make it so resistances from artifact files are absolute 
	adjustments.
Makefile.in configure configure.in: Fix check for libdes to see if des_crypt
	exists in libdes before setting HAVE_LIBDES
crossedit/Makefile.in:  Add Cnv/libCnv.a before LIBS - should fix
	linking error on irix systems.
utils/metaserver.pl: modified so it ignores entries from hosts that 
	report their name as put.your.hostname.here

MSW 2000/12/3:
crossedit/Attr.c: Add the new resist names to set of variables one can set.

MSW 2000/12/3:
Misc changes.  Main one is adding PNG support to the editor.
TODO: Remove outdated things to do (like partial resistance code)
configure, configure.in, include/autoconf.h.in: Add check for libpng.
include/global.h: Remove displaymodes - moved to crossedit/Defines.h
crossedit/App.c, crossedit/App.h crossedit/CrEdit.c crossedit/CrFace.c
  crossedit/CrList.c crossedit/CrUtil.c crossedit/Edit.c crossedit/crossedit.c 
  crossedit/xutil.c, crossedit/png.c (new file): Add support for png display
  in crossedit.
crossedit/Makefile.in:  Add png.c file.
server/c_misc.c: Change who command to only display real players, and not
  players in process of connecting/unconnecting.  Also, remove code to display
  old sockets, since those are not supported anymore.

MSW 2000/12/3:
Checking for partial resistance code.  Various minor errors also fixed
(compiler warnings, unused variables, Makefile.in changes, etc).
PR code also includes support to send protections to the client.
Files changed:
    common/Makefile.in common/button.c common/exp.c
    common/friend.c common/holy.c common/info.c common/init.c
    common/item.c common/living.c common/loader.c common/loader.l
    common/object.c common/player.c common/re-cmp.c
    common/readable.c common/treasure.c crossedit/App.c
    crossedit/crossedit.c crossedit/proto.h doc/crossfire.doc
    include/define.h include/global.h include/libproto.h
    include/newclient.h include/newserver.h include/object.h
    include/player.h include/sproto.h lib/Makefile.in
    lib/archetypes lib/artifacts lib/crossfire.png
    lib/crossfire.xbm lib/crossfire.xpm random_maps/rproto.h
    random_maps/special.c random_maps/style.c server/Makefile.in
    server/apply.c server/attack.c server/c_misc.c
    server/c_object.c server/commands.c server/disease.c
    server/gods.c server/input.c server/monster.c server/player.c
    server/resurrection.c server/rune.c server/spell_effect.c
    server/spell_util.c server/swap.c socket/metaserver.c
    socket/request.c
    Added Files:
    include/attack.h


------------------------------------------------------------------------------
Changes for 0.95.8:

MSW 2000/11/26:
utils/metaserver.pl (added), utils/Makefile.in:  Add metaserver.pl script.

MSW 2000/11/25:
include/patchlevel.h (removed), doc/spell-docs/Makefile (removed),
include/Makefile.in, include/version.h, server/init.c, server/main.c,
socket/metaserver.c: remove patchlevel.h - include the patchlevel in the
 version.h file, update other files to use version as a single string.

MSW 2000/11/25:
socket/metaserver.c: If on FreeBSD systems, do not attempt to connect to
the metaserve.  FreeBSD seems to have a problem using sendto on a connected
soccket.

MSW 2000/11/25:
configure.in, configure, include/autoconf.h.in, server/main.c:  Update
to check for libdes.a and des.h and use those for password decryption - fixes
a problem on freebsd if it is using md5 crypt.  Hopefully it doesn't break
anything.  main.c was also checking for HAVE_CRYPT_H too early.
include/sproto.h:  Needed updating.  Unrelated to above changes.


MSW 2000/11/22
server/main.c:  Modify enter_exit so that it properly uses per player
unique maps that are only in memory and not on disk.  Remove unused
variable from process events (unrelated change).

PeterM  2000/11/18:
  New spells added:
  1)  Sanctuary   (aura of counterwall)
  2)  Peace	  (make monsters unable to fight)
  3)  Spiderweb   (create spider webs)
  4)  rage	  (heroism, armour, haste, regenration combined)
  5)  forked lightning  (lightning which forks and strikes )
  6)  flaming aura  (aura of fire)
  7)  vitriol     combined ball/cone/pool acid attack spell
  8)  vitriol splash  (spell for internal use only)
  9)  ironwood skin  (clerical version of armour spell)

Not implemented:  10) poison fog

MSW 2000/11/17:
socket/metaserver.c:  More changes - use fcntl to set O_NONBLOCK.  Don't
   close socket if connect fails, since with sendto it is not required
   that the connect works.

PeterM:  2000/11/17
define.h spells.h spellist.h spell_util.c spell_effect.c:
  windstorm spell implemented.
attack.c:  saving throw behavior modified.  Items take a bit
of DAM to destroy now instead of being destroyed with 1hp attacks.

MSW: 2000/11/16:
socket/metaserver.c: Add #ifdef MSG_DONTWAIT into metaserver.c for systems 
	that lack that definition.
random_maps/style.c: alphasort was not properly de-referencing pointers
	when doing name comparisons, and thus returned garbage results,
	resulting in a crash when entering random maps.  This only happens
	for systems which lack scandir in normal libraries (like Solaris).
	BSDs and linux have scandir built in, and did not have a problem.
server/disease.c: fix infect_object - server would crash if player did
	not have praying skill and was infecting someone else.
end of changes, MSW 2000/11/16

PeterM : 2000/11/14
PeterM: Made some changes so that non-disease effects may be done without
being labelled as a disease.  Also, fixed a bug in which we'd kill something
and then try to insert something in the killed thing's map.



metaserver update:
common/init.c: Add meta_ fields to settings structure initialization.
include/global.h: Add meta_ fields to settings structure.
include/sockproto.h: Updated for new meta_ functions.
lib/Makefile.in: Have it install settings file.
lib/settings: Default settings file with some metaserver default value.s
server/init.c: Add load_settings file.  Add call to metaserver_init.
server/main.c: Add call to metaserver_update in do_specials.
socket/Makefile.in: Add metaserver.c to list of files.
socket/metaserver.c:  File that deals with metaserver related data.
socket/item.c: Remove some unused variables.  Unrelated to metaserver changes.
socket/loop.c: Add calls to metaserver_update in block_until_new)connection.  Change
	function so that if there are no active players, it still timeouts and
	does metaserver update.  Basically changed to do it the way the
	WATCHDOG code did it.
End of metaserver update.  MSW 2000-11-13

server/player.c:  removed unused tmp2 variable from move_player_attack.
modify depletion in kill_player so the maximum depletion for a stat is -50.  This
should preven stat wrapping from -126 to 127.  MSW 2000-11-08

==============================================================================
MSW 2000-11-07
common/item.c: query_base_name was not return plural version of items
with 'of' in name.  Also, much of the function was not using safe_strcat,
which could result in buffer overlow problems.

common/object.c: Change update_position so that we always generate
3 images per space.  This fixes players standing on top of dragon transports,
but generally works for things like monsters standing on objects.
insert_ob_in_map:  change 'return' statement to 'return NULL'.  Also
remove unused map pointer.
decrease_ob_nr:  Fix bug for client updates when player drops item that
is then consume.  It was using op->above after object was removed to
find the player.  Store above pointer before we remove the object.

socket/item.c:  Don't terminate pointer as returned by query_base_name -
instead, terminator buffer after we copy it.  For simple object,
query_base_name may directly return a pointer to the objects name
which is only long enough to hold the name itself.

socket/lowlevel.c:  Abort if we are trying to send the client a packet
longer than supported by the protocol.  Since that buffer is static,
overflowing it will just create memory corruption - easier to stop
then than try and debug it later.

End of MSW checkin 2000-11-7
==============================================================================


PeterM:  2000-11-06
server/spell_util.c	crash bug removed from move ball lightning:
ball lightning mover improved in general.  --PeterM

--------------------------------------------
--- BEGIN stop_item() / attack fix patch ---  Jan Echternach 2000-11-06
--------------------------------------------

Summary of this patch:  Provide new stop_item() function for properly
handling "moving" items on a map (flying arrows, thrown objects,
active cones); obsoletes the workarounds.  Fix some attack bugs (with
possible server crashes) - many attackers attacked while being
removed, even though much code could only handle the attacker being on
the same map as the victim (not even the attacker being in the
victim's inventory, e.g. poison).

common/object.c: insert_ob_in_map():  Call check_walk_on() after
update_object() because the latter needs to update some very
important flags used by a lot of code before this code is called
by check_walk_on().

common/object.c: get_split_ob():  Completed support for splitting
removed objects.

common/object.c: decrease_ob_nr(): Rewrote this function: Added
support for removed objects.  Removing an object completely didn't
always update the environment's weight properly.  Removing an amount
of 0 from an object with nrof == 0 destroyed the object.  Improved
performance a bit (don't need to update the player's weight if an
object below the player is modified).

server/apply.c: move_apply():  Added recursion limit.

server/apply.c: move_apply(): THROWN_OBJ and ARROW:  Use new
hit_with_arrow() function.

server/apply.c: move_apply(): FBULLET and BULLET:  Call
check_fired_arch() only when the victim blocks the square (FLAG_NO_PASS
or FLAG_ALIVE).

server/attack.c: save_throw_object():  Use new stop_item() function
before trying to modify an object.  Added originator to all
insert_ob_in_map() calls.

server/attack.c: hit_map():  Added log message if the hitter is not on
a map.  Added was_destroyed() check after calling save_throw_object().

server/attack.c: get_attack_mode() and abort_attack():  New functions
to determine the type of attack (simple or full attack).

server/attack.c: attack_ob():  Now only attack_ob_simple() with default
damage and weapon class values.

server/attack.c: attack_ob_simple():  Contains most of old attack_ob(),
but takes damage and weapon class as parameters, needed for
hit_with_arrow().  Uses get_attack_mode() and abort_attack() to
support new "simple" attack mode.

server/attack.c: stick_arrow() and hit_with_arrow():  Moved those parts
of old stop_arrow() and move_arrow() that dealt with attacking a
victim over here.

server/attack.c: hit_player():  Uses get_attack_mode() and
abort_attack() to support new "simple" attack mode.

server/attack.c: paralyze_player():  Use insert_ob_in_map_simple()
instead of insert_ob_in_map() because the callers are not prepared for
this function triggering any complex machinery, and
insert_ob_in_map_simple() should be enough for plain visual effects.

server/attack.c: thrown_item_effect():  Don't need to deal with thrown
objects, hit_with_arrow() already does everything necessary.

server/attack.c: adj_attackroll():  Added log message if hitter and
victim are not on the same map.

server/c_object.c:  Fixed two typos in "can't pick up xxx" messages.

server/c_object.c: pick_up_object():  Removed can_pick() check because
pick_up() already checks this.  Added support for picking up removed
objects because the stop_item() in pick_up() can now call us with
removed objects.  Moved FLAG_STARTEQUIP check to pick_up().  Fixed
weight limit lookup for monsters that have strength > MAX_STAT.

server/c_object.c: pick_up():  Use new stop_item() function.

server/player.c: fire_bow() and server/skills.c: do_throw():  Removed
FLAG_NO_PICK workaround for flying objects.  stop_item() now handles
this correctly.

server/rune.c: spring_trap():  Fix unlimited trap recursion.  Since
traps are triggered by move_apply(), the result of triggering a trap
may trigger the trap again before it is deactivated.

server/rune.c: spring_trap():  Runes that don't cast spells can only be
triggered by living objects.

server/spell_effect.c: move_cancellation():  Don't call hit_map() with
a removed attacker.

server/spell_util.c: cast_cone():  Only print warning message about
cones that don't have FLAG_FLY/WALK_ON if the cone does any damage.

server/spell_util.c: move_cone():  Removed workaround for cones in ice
cubes.  stop_item() now handles this correctly.

server/spell_util.c: explode_object(): Rewrote this function: New
interface - exploding object must not be removed when the function is
called, it must have an other_arch (i.e. it must be able to explode),
and it will be gone for sure when the function terminates.  Removed
some code with no effect.  Don't call any attack functions with
removed attackers.

server/spell_util.c: check_fired_arch():  Rewrote this function.

server/spell_util.c: move_fired_arch():  Rewrote most of this function:
Don't attack with removed attackers.  Call check_fired_arch() instead
of duplicating its code.

server/spell_util.c: move_ball_lightning():  Don't attack with removed
attackers.  Rewrote the movement algorithm to simplify this task.

server/time.c: stop_item() and fix_stopped_item:  New functions.

server/time.c: fix_stopped_arrow():  Contains most of the old
stop_arrow() function.  Unlike stop_arrow(), it takes an arrow that is
not removed.  Removed FLACK_NO_PICK workaround.

server/time.c: stop_arrow():  Stops arrows and thrown objects and puts
them on the map.  Sticking objects into targets is no longer handled
by stop_arrow(), but by hit_with_arrow().

server/time.c: move_arrow():  Don't attack with removed attackers.

socket/item.c: esrv_move_object():  Removed misleading comment.

------------------------------------------
--- END stop_item() / attack fix patch ---  Jan Echternach 2000-11-06
------------------------------------------

server/time.c:  Add call to esrv_update_item to update the face for
the client after the player chooses a class.  MSW 11/3/2000

server/c_object.c, socket/item.c:  Fixed for long item support.  pick_up_object
in c_object was overwriting a fixed length string, causing server crashes.
item.c was not properly terminating plural version of object name, resulting
in corrupt packets being sent to the client.  MSW 11/2/2000

PeterM:
  ball lightning made stronger, strikes larger area, never
  hits player.
  divine shock spell added.

include/sproto.h:  Removed prototype of obsolete make_gravestone()
function.
server/apply.c:  Put back gravestone_text() function that was removed
accidently a while ago, needed by NOT_PERMADEATH.
server/player.c:  Don't use the dead player as the originator of object
movements.  Fixed string handling for NOT_PERMADEATH.
- Jan Echternach 10/30/2000


Major race/class change by PeterM:
BEGIN:
*****************
apply.c:  new function, apply changes to player.  If the change is a CLASS,
player receives certain attributes from the class. 

login.c:  make sure people using the old race/class archetypes in their
player files can still use them.

player.c:  
1) give_initial_items modified for greater flexibility:  you
can pass in a treasurelist.  
2) Also, initial forces are applied to the player.
3) Comment added on the stat roll function.  
4) Word of recall into the new class-choice map (unfortunately hard-wired.) for newly-rolled players.
5) gen_sp and gen_hp and gen_grace now allowed to go negative to slow down player
regen.

skill_util.c
1)  Don't give out basic skills anymore.  This interferes with the class code.

spell_util.c
1)  Praying failures moderated in frequency.
2)  Summoned creatures enhanced in wc, speed, depending on casting level.
3)  Word of recall allowed to work in no-magic areas if a flag is set.

time.c
1)  Move player changer function added.
2)  Marker object expiration added.

living.c:  cleric fail chance array modified.

map.c: bugfix for random map/recycle tmp map problem.

define.h:  defines added for playerchangers and class types
           base 10 numbers added for the spell paths.

spellist.h: fixed up summoning spells a little

sproto.h:  new prototypes

config.h:  hate RECYCLE_TMP_MAPS, turned it off
  
maps/HallOfSelection:  new map for class choice.

lib/treasures:  classs/race stuff heavily modified
lib/archetypes, animation, bmaps, bmaps.paths, crossfire.png faces
    crossfire.xbm  New faces, etc.

END race/class stuff 10/16/2000
apply.c:  bugfix for random map/recycle tmp maps interaction.  --PeterM 10/16/200

include/skill* server/skill_util.c:  levitation skill added.
9/26/2000.  --PeterM

common/map.c server/apply.c:  Fix an interaction between
RECYCLE_TMP_MAPS and random maps which would cause crashing.
peterm: 10/12/2000

disease.c spell_effect.c:  peterm: 10/5/2000
1)  Diseases moderated in power by ~1/2 and randomized.
    Now monsters can have a mild/moderate/serious/fatal case
    of a particular disease.
2)  cause disease spells modified to NOT go through objects
    spells ordinarily couldn't go through.

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

Changes for 0.95.7:

README: Add crossfire.csua.berkeley.edu server.
TODO: Remove entry about setable behaviour for keyrings, since that has now
been done.
include/patchlevel.h, Makefile.in:  Update for 0.95.7  MSW 9/20/2000

lib/maps:  got rid of the stuff that was there.  Useless stuff.
the maps dist. is the thing to use.  --PeterM


common/living.c, server/skill_util.c:  Patches by Garth Denley:
Fixes divide by zero crash, sets up perm exp when a new player is loaded,
seperates permanent exp code/calculations into another function.
checked in by MSW, 8/24/2000

lib/crossfire.png: ground/sea*png - remove transperancies from png images
since they should not be transparent.  MSW 8/23/2000

doc/spoiler.html/(Makefile.in,empty.pbm, makeps.pl, spoiler.html):  Modify
to make gif images from png source instead of xpm images.  A valid question
to ask is why convert to gif at all and not just keep in PNG format.  The
answer right now is that png support in netscape at least still is not very
good, and it displays gifs better.  MSW 8/8/2000

Add/Remove some LOG calls:
common/living.c:  Remove log messages about gen_sp values on armor
server/login.c, server/main.c: Add messages about player logins/logouts with
IP address.  Useful for tracking potentially troublesome players and where
they are player from.  MSW 8/7/2000

The following change basically does the following:  When the server sends an
item name to the client, this item name is now two pieces - the first piece
of the name is its singular form, the second piece is the plural name.  This
now makes items in the inventory appear more proper in terms of pluralization
and just normal English.  I did notice that the server does not know how
to properly make 'torch' plural - it turns it into torchs.  A matching
check in for the client has also been done.
include/newserver.h:  Update VERSION_SC to 1024
common/item.c: Change query_base_name to take a second option on whether
  we should generate a plural version of the name or not.
socket/item.c: Modify functions to use second argument on the query_base_name
  function.  Update item commands to send two part names (singular & plural).
  Modify esrv_send_look to use item1 protocol command instead of item command.
server/c_object.c: Update item_matched_string to use second option to
  query_base_name.  Modify function to check against both singular and
  plural versions of name.
server/shop.c: Modify shop_listing command usage in query_basename to use
  second option.  It will also generate the singular name, but that is only
  used on sorting, so I don't think it will generally cause any problems.
include/libproto.h:  rebuilt because query_base_name has an addition opt.
Mark Wedel 8/6/2000

include/config.h, include/global.h, common/init.c, common/living.c,
server/init.c, server/player.c, server/skill_util.c: Add permanent
experience and balanced stat loss features (code by Garth Denley).
Permanent experience make some experience in the skills permanent.  Balance
stat loss makes stat loss less likely/costly at low level and more costly
at higher levels.  These features are by default off, but can be turned
on either in the config.h file or via command line options.  Code checked
in by MSW 8/1/2000

server/time.c:  Update the change_object function such that if the object
is in a players inventory, send a delete & send_item for the object that
has changed (the delete + send_item is necessary due to the ways objects
change, so we just can't sent a update_item).  This fixes the 'torches
go dim & then out but client inventory not updated' bug, and likely fixes
some other problems - I am not sure how many other objects out there
change.  MSW 7/28/2000

random_maps/treasure.c:  potential crash bug fixed.  Only applied
when a bad archetype was given as a wallstyle.  I will also put
in a redundant archetypes fix. --PeterM 7/26/00

lib/adm/map_info, lib/adm/map_check:  Update to use new layout of installed
files (share/crossfire), know about random exits (it doesn't do any checking
to make sure the values are sane, which it probably should, but at least it
won't complain about them), update to use /usr/bin/perl.  MSW 7/25/2000

server/resurrection.c
include/spellist.h:  PeterM:  fixed a few unintended things about
resurrection:  experience removal was wrong, spellpoints/levels
changed.  --PetrM

lib/archetypes:  Update to keep in sync with arch tree.  Changes to
about a dozen arch's to remove the 'a' in their name.  MSW 6/27/2000

server/c_object.c: Fix command_drop which was doing incorrect check for
invisible object - it was supposed to skip over them and only do visible
objects, instead it was doing the reverse.  Fixes the 'drop command.
MSW 6/27/2000

server/input.c: Make the inventory command more robust for very long
object names - specify a maximum number of characters we will take from
the name.  Without this, you could get buffer overruns that cause crashes.
No normally generated items would ever likely have names long enough to
exploit this bug however.  MSW 6/27/2000

INSTALL, README:  Update mailing address to real-time address.  MSW  6/27/2000

server/login.c: Load and save usekeys value in player save file.  MSW 6/27/2000

Patch by Jeffry Hantin which fixes glow objects in map.
insert_ob_in_map_simple now will call the appropriate light updating code.
Applied by MSW 6/26/2000

server/player.c: check_pick():  Rewrite of this function to consistently
skip items that can't be picked up, and to only use a single loop over all
items on the map square.  - Jan Echternach 6/23/2000

------------------------------------------------------------------------------
Changes for 0.95.6:

server/monster.c:  Patch by Neil Muller so that corrupt/bad @match entries
will not cause the server to crash.  Applied by MSW 6/21/2000

lib/archetypes: rebuilt for 0.95.6
lib/collect.pl:  Modify to search the archetypes directories in alphabetical
order - before I believe they were collected in basically inode order.
This should make it easier to multiple people to run the collect script
not have basically an entirely new archetyeps file.  MSW 6/21/2000

server/commands.c; server/c_object.c: dump_object_from_tag():  Removed
broken command.  Fixes server crashes very easily triggered by players.
- Jan Echternach 6/21/2000

server/attack.c: deathstrike_player():  Check for def_lev == 0 very early
(and print error message if we find such an invalid level).  Should fix
server crash in case archetypes or maps get broken again in that an
alive object has level < 1.  - Jan Echternach 6/21/2000

Makefile.in: Update version to 0.95.6
include/patchlevel.h: Update to .6 for 0.95.6 release
common/porting.c, include/config.h, include/loader.h, include/skills.h, 
include/spells.h, include/treasure.h, include/version.h, random_maps/style.c:
    Update my mail address and copyright date.  Mostly committed to sync
    up my data with the CVS repository - MSW 6/20/2000

random_maps/treasure.c server/apply.c:  made containers able to
have more than one treasure in them, made a fix to treasure.c, which would
change the options given to it in an unintended way.  --PeterM 6/20/2000


common/living.c: fix_player():  Bugfix: Don't reset FLAG_FLYING,
FLAG_REFL_SPELL, FLAG_REFL_MISSILE and FLAG_SEE_IN_DARK if the archetype
has these flags.  - Jan Echternach 6/19/2000


random_maps/*  Numerous changes improving random maps, including
two crash-fixes, a new type of 'special', ability to copy inventory
of monsters when putting them into maps...  --PeterM 6/19/2000

New naming scheme for random maps:  they won't grow in size
indefinitely anymore.  --PeterM 6/17/2000

server/input.c: command_cast_spell():  Bugfix: Call check_skill_to_fire()
even for wizards because this function has the important side effect
of setting the current skill and experience objects.
- Jan Echternach 6/19/2000

server/apply.c: apply_treasure():  Bugfix: We need to trigger runes as
they are found in the treasure chest, because move_rune() will no longer
trigger them for us.  - Jan Echternach 6/18/2000

Updated the INSTALL directions.  MSW 6/16/2000

Modified the editor to make certain objects (teleporters, creators,
markers) more easily editable.  --PeterM 6/16/2000

Modifed how firewalls worked.  They can now be triggered by
handles as well as turned.  Ones which are turned by handles
cannot be triggered by handles.  PeterM 6/15/2000

fixes to random_maps:
exit.c:  won't crash if named final_map doesn't exist
room_gen_onion.c:  reordered the options more sanely
special.c:  fixed a crash-bug:  nuke_map would nuke parts of monsters, but
not the whole monster.  --PeterM

server/skill_util.c:  Fix type in change_skill - was doing an == operation
when it should just have been an =.  MSW 6/13/2000

common/anim.c:  animation_object() - return if object does not have a valid
animation after logging error.  Before, we logged the error and would
promptly crash.  MSW 6/13/2000

server/apply.c: apply_treasure():  Bugfix: Set FLAG_NO_APPLY before
moving object to the top.  - Jan Echternach 6/13/2000

server/time.c: move_marker():  Bugfix: Call update_ob_speed() after
changing force->speed.  - Jan Echternach 6/13/2000

server/spell_util.c: move_swarm_spell():  Improved distribution of
fired objects.  Fixed starting position of fired objects to be able to
hit targets immediately in front the caster.  - Patch by Jeffrey Hantin,
applied by Jan Echternach 6/13/2000

server/disease.c, sproto.h, rune.c   Fixes from jhantin@derringer.net for diseases:
   Reversed strstr calls, force argument added to infect_object,
diseases in immune carrier last forever, needles use infect object,
cast_cause_disease won't fail.  --PeterM 6/9/2000

common/loader.l:  Fix handling of objects with no animation.  Fixes server
crash if object's archetype has an animation, but object doesn't.
- Jan Echternach 6/9/2000

common/loader.l: get_ob_diff():  Bugfix: Issue a "is_animated 0" line
if the object has an animation, but doesn't have FLAG_ANIMATE.
- Jan Echternach 6/9/2000

server/apply.c: manual_apply() and monster_apply_special():  Don't check
for FLAG_UNPAID if object is applied.  This should make the code more
robust if an unpaid item get's applied accidently.
- Jan Echternach 6/9/2000

server/apply.c: apply_special():  New optional flags AP_NO_MERGE and
AP_IGNORE_CURSE.  - Jan Echternach 6/9/2000

server/monster.c: find_mon_throw_ob(); server/skills.c: find_throw_ob():
Bugfix:  Use AP_NO_MERGE flag to prevent unapplied object be merged with
other objects.  - Jan Echternach 6/9/2000

server/spell_effect.c: animate_weapon:  Bugfixes: Correctly unapply
weapon.  Don't set FLAG_APPLIED directly on weapon in golem, but use
apply_special().  Don't call esrv_send_item() when caster is not a player
(fixes server crash if monster casts this spell).
- Jan Echternach 6/9/2000

random_map/<various>  Fixes in the map code for various things, including:  
1) crash bug on
multi-square monsters. 2)  no treasures in final_map, 3) new feature of doing
walls only, ....  --PeterM 6/9/2000:

common/button.c: do_mood_floor():  Bugfixes: Only players can have pets.
Call add_friendly_object() for friendly monsters.
- Jan Echternach 6/8/2000

server/spell_effect.c and server/spell_util.c: Several functions:  Only
add a pet if there really is a pet's owner, and it's a player.
- Jan Echternach 6/8/2000

server/spell_effect.c: cast_charm() and cast_charm_undead():  Bugfixes:
Only players can cast these spells.  This fixes server crash if
a monster casted a charm spell, and the charmed pet was killed.
Call add_friendly_object for friendly monsters.
- Jan Echternach 6/8/2000

common/friend.c: remove_friendly_object():  Use llevError for error
messages.  - Jan Echternach 6/8/2000

common/living.c: fix_player(); server/gods.c: tailor_god_spell();
server/spell_effect.c: summon_avatar() and animate_weapon(): Bugfix: Set
a string to NULL after calling free_string().  This fixes a nasty bug
that caused the string's reference count drop below 0, which resulted
in corruption of malloc()'s internal data structures (and possibly
server crashes).  - Jan Echternach 6/8/2000

server/time.c: move_creator():  Bugfix: Call free_string() to free old
values of op->name and op->title before overwriting them with new values.
- Jan Echternach 6/8/2000

common/object.c: insert_ob_in_map_simple() and insert_ob_in_map():
Check that we don't insert freed objects.  - Jan Echternach 6/8/2000

server/attack.c: hit_player_attacktype() and hit_player():  Bugfix: Check
that find_god() really found a god, and that 'god->slaying' is not NULL.
Fixes crash if a monster casted turn undead and actually hit something.
- Jan Echternach 6/8/2000

server/attack.c: hit_player():  Check that a pet's owner is a player.
Prevents server crashes if a monster has a pet monster due to a bug
somewhere.  Use llevError for error message.  - Jan Echternach 6/8/2000

server/time.c: move_arrow():  Use llevDebug level for "Arrow had no
map" message.  - Jan Echternach 6/8/2000

server/c_object.c, server/spell_effect.c, server/spell_util.c:  Bugfixes:
Added some missing checks for destroyed objects.  Use was_destroyed()
or return value of insert_ob_in_map() to check for destroyed objects,
not FLAG_FREED or FLAG_REMOVED.  Don't use op->count of destroyed objects.
- Jan Echternach 6/8/2000

server/shop.c: get_payment2():  Type of tag is 'tag_t', not 'long'.
- Jan Echternach 6/8/2000

server/spell_effect.c: animate_bomb():  Fix environment checks.
- Jan Echternach 6/8/2000

server/spell_util.c: fire_bolt():  Bugfix: Set level of bolt.
- Jan Echternach 6/8/2000

server/spell_util.c: explosion():  Bugfix: Set FLAG_NO_APPLY before
moving the exploding object to the top.  - Jan Echternach 6/8/2000

server/spell_util.c: put_a_monster():  First create the monster
completely, then just insert its head.  - Jan Echternach 6/8/2000

server/time.c: generate_monster():  Bugfix: Don't free generators that
are used up in this function.  process_object() already does this.
This fixes steambolt (which is a generator but must not used up here -
generate_monster() wasn't looking at FLAG_IS_USED_UP) and all generators
which should really be used up (because process_object() didn't expect
generate_monster() to destroy the object).  - Jan Echternach 6/8/2000

server/rune.c: trap_disarm():  Bugfix: Use SK_level() to determine
disarmer's level.  Fixes server crash if multisquare monster casts
"disarm".  - Jan Echternach 6/8/2000

server/attack.c: hit_map():  Use was_destroyed() to properly check for
destroyed next object.  Use llevError for error messages.  Skip all
objects that are (no longer) at the specified map position.
- Jan Echternach 6/8/2000

server/map.h server/main.c Increased buffer sizes for map paths. 
Needed for random map code.  --PeterM 6/6/2000

6/4/2000:  Fix done to disease.c which causes diseases to 
put experience into the appropriate category.    --PeterM

6/4/2000:  Added race fields to a lot of monsters.  Modified
disease arcs so that they'll be specific to races.  Changed
include/spellist.h to re-enable the disease spells.  --PeterM

6/4/2000  (disease.c) Added a self-limiting parameter to diseases so
that their power can be tuned to be reasonable.  --PeterM

lib/crossfire.png: Some floors modified to no longer have transperencies.
include/newserver.h:  Add Send_Face_Png made, also update versions of
	the protocol
include/newclient.h:  Add CF_FACE_PNG constant.
socket/request.c: Add support for receiving PNG facemode request,
	ad final logic to send png images to the client.
Changes by Mark Wedel, 6/2/2000

lib/checkarch.pl:  Check for archetypes with type FIRECHEST but no level.
- Jan Echternach 5/29/2000

server/apply.c: move_apply(): Added handling of THROWN_OBJ, CANCELLATION
and BALL_LIGHTNING.
server/spell_effect.c: cancellation(): Traverse inventory of objects
with type THROWN_OBJ.
- Jan Echternach 5/29/2000

server/player.c: fire_bow() and server_skills.c: do_throw(): Bugfix: Don't
use op->count of freed objects.  Use was_destroyed() to check for freed
objects instead of QUERY_FLAG (FLAG_FREED).  - Jan Echternach 5/29/2000

server/spell_util.c: fire_a_ball(): Bugfixes: Use op->other_arch as
the archetype to fire, not FBULLET.  (-> Firechests now cast fire balls
again, not snowballs.)  Set level of fired archetype.  Check if object
was destroyed after insert_ob_in_map().  - Jan Echternach 5/29/2000

server/time.c: move_firewall() and move_firechest(): Do nothing if
object has no map.  Fixes server crashes if a dm creates such a thing
in the inventory.  - Jan Echternach 5/29/2000

lib/collect.pl:  Modify so that it does not complain about png files in the
arch directory MSW 5/28/2000

common/item.c:  Fix query_short_name - wasn't generating all item names
properly because of changes made a few days ago - some areas manipulate
the string being worked on and was not updating the length properly.
MSW 5/26/2000

doc/mapguide:  Fix some typos.  MSW 5/26/2000

include/define.h: Add MIN_ACTIVE_SPEED value to determine what threshold
something will be put on the active list or not instead of using
varying values throughout the source code.
common/item.c, common/object.c, server/monster.c, server/pets.c,
server/spell_effect.c:  Updated to use the MIN_ACTIVE_SPEED instead of
hardcoded values.  MSW 5/26/2000

include/define.h,include/global.h, common/image.c:  Remove following old
face information: INV_*_FACES, BLOCKED_FACE, STIPPLE[12]_FACE.  This
is just a general cleanup - the server has not used these since the
X11 code was pulled from the server.  MSW 5/26/2000

common/living.c: Add entries for the attack type AT_INTERNAL in description.
include/material.h: Update to include saves against INTERNAL attacktype.
include/living.h:  Remove defunct objects_saves external referance.
The additions of internal to the tables should not really be needed, as
internal attacktypes should not be used publically, but these also act as
placeholders for future attacktypes.  MSW 5/26/2000

* server/attack.c: hit_map(), hit_player(); server/spell_effect.c:
move_cone(); server/rune.c: spring_trap(); server/spell_util.c:
move_missile(): Bugfix: Added missing was_destroyed() calls.
* server/rune.c: spring_trap(): Bugfix: Call trap_show() before the rune
has a chance to be destroyed.
* server/attack.c: hit_map(), hit_player(): Check for freed objects
right at the beginning of the function.  Removed check that hitter has
a name from hit_player().
* server/spell_util.c: move_cone(): Bugfix: Remove cone objects in
inventories from active list, this fixes the cone without map problem when
a flower was hit with ice and put into an icecube.
* server/spell_util.c: move_missile(): Bugfix: Don't call hit_map() while
missile is removed from the map.
* server/apply.c: manual_apply(): Handle MMISSILE.
- Jan Echternach 5/26/2000

* server/spell_effect.c: animate_weapon() and server/spell_util.c:
summon_monster(): Bugfix: Set FLAG_FRIENDLY for friendly objects.
- Jan Echternach 5/26/2000

* server/attack.c: hit_player(): Bugfix: remove_friendly_object()
was called always after an object with type GOLEM had been killed,
but friendly objects are objects with FLAG_FRIENDLY, not objects with
type GOLEM.  This fixes some "Remove_friendly_object(): Can't find
object" errors.   - Jan Echternach 5/26/2000

-----------------------------------
--- BEGIN apply() cleanup patch ---  Jan Echternach 26/5/2000
-----------------------------------

* player specific code moved from apply() to player_apply() and
player_apply_below().

* apply(): null pointer check removed

* (bugfix?) print message if scroll is unusable because of invalid
spell number

* bugfix: if the altar casted a spell, the message was sent to the
(destroyed!) sacrifice, not the player

* split apply() -> move_apply() / manual_apply()

* move_apply(), check_walk_on(), insert_ob_in_map() and other functions:
New parameter 'originator' that is the object that caused another object
to be inserted into the map.  This removes the need to look through all
map objects above an altar to find the player who dropped the sacrifice.

* always check FLAG_UNPAID in manual_apply()

* don't check FLAG_UNPAID in apply_special(), new function
monster_apply_special() which checks FLAG_UNPAID and calls apply_special()

* many new functions like apply_altar() and apply_spellbook() to make
the switch statements in move_apply() and manual_apply() shorter

* changes to actual apply() code:

ALTAR:
  spell casting altars should work now if not operated by a player
  common/button.c, operate_altar(): altar's message is sent to altar's
    map, not player's map
  bugfix: if sacrifice was accepted, apply() didn't tell the caller
    that it has been destroyed
ARROW, CONE, FBULLET, BULLET:
  now returns 'victim destroyed' if victim was killed by the attack
TRAPDOOR:
  play sound only if something fell through the trapdoor
  print trapdoor message _before_ falling into trapdoor
TRIGGER_ALTAR (in check_trigger()):
  don't check for sacrifices if called from animate_trigger()
  don't call check_trigger() from fix_auto_apply() anymore (this change
    breaks maps with altars that have their sacrifice already stored on
    them)
DEEP_SWAMP:
  deep_swamp() -> walk_on_deep_swamp() / move_deep_swamp()
  when deep_swamp() (now move_deep_swamp()) is called from
  process_object(), assume that state (swamp->stats.food) is already 1
EXIT:
  removed support for multisquare players
  don't print 'is closed' message when moving on an exit, only print this
    message if exit is applied manually
SIGN:
  only increment last_eat if it hadn't reached the limit yet
SPELLBOOK:
  removed partial support for applying by monsters
BOW, WAND, ROD, HORN:
  moved code to apply_special()
CLOCK:
  bugfix: Monsters must not apply a clock, they would crash the server.
POWER_CRYSTAL:
  Bugfix? Don't call esrv_update_item() if not applied by a player.
LIGHTER:
  Bugfix? Just return 0 if not applied by a player.

* changes to apply_special():

BOW:
  remove double check_skill_to_apply()
ROD, HORN:
  change message from "you apply ..." to "you ready ..."

BOW: FLAG_READY_BOW is now set by apply_special(), but that seems
redundant because monster_check_apply() also sets this flag.  Remove
setting of this flag from apply_special() because it could have a
more complex meaning in monster.c or remove setting of this flag from
monster_check_apply() because such stuff should be handled in apply.c?
FLAG_READY_BOW is also unset in apply_special() if a bow is unapplied.

CONE:
  don't multiply damage by 20
SIGN:
  you can hear magic mouths even if you are blind
  however, now you can also read signs with FLAG_WALK_ON/FLAG_FLY_ON if you are
    blind
  (different object types or a new flag would be required)
RUNE:
  detonation moved from move_rune() to move_apply() -> runes will now always
    detonate if somebody steps on them
  allow runes with FLAG_FLY_ON

completely removed GRAVE and MONEY_CHANGER

common/object.c: was_destroyed(): new function
include/object.h: new typedef tag_t
move_apply() returns void, check_walk_on() uses was_destroyed()

lib/checkarch.pl:
  check for archetypes with walk_on, walk_off, fly_on or fly_off and without
    a type
  check for archetypes with type FIREWALL (type 62) and without a level

* server/apply.c: Bugfix: Don't skip calls to change_skill() if wizard -
calc_skill_exp() requires change_skill() to set the current experience object.

* server/monster.c: find_mon_throw_ob():  Bugfix: Unapply applied object even
if heaviest object was choosen.
Bugfix: Use monster_apply_special() to unapply, clearing FLAG_APPLIED isn't
enough. -> Should fix the "HAS_READY_BOW without bow" errors.
* server/skills.c: find_throw_ob():  Bugfix: Use player_apply(), clearing
FLAG_APPLIED isn't enough.
Replace redundant check for FLAG_INV_LOCKED with error message at end of
function if the first check failed somehow and we have choosen an object with
FLAG_INV_LOCKED.
make_throw_ob(): error message if object is applied

* lib/checkarch.pl: check that potions (type 5, POTION) have a level

* server/apply.c: apply_special(): Handle all cases of applying and unapplying
skill objects.
* server/apply.c: manual_apply(SKILL): Just call apply_special().
* server/skill_util.c: change_skill(): Rewrite to simply use apply_special()
for changing skills.

* server/apply.c: apply_special(): Bugfix: Fixed return values.

* server/skill_util.c: link_player_skills(): Bugfix: Don't set exp_obj for
(visible) skill tools.
* server/skill_util.c: link_player_skills(): Bugfix? Reset op->chosen_skill
and FLAG_READY_SKILL because we have unapplied all skills.
* server/input.c: legal_range(): Bugfix: range_skill is valid only if
op->chosen_skill != NULL, not when there is some (unapplied) skill somewhere
in the inventory.
* server/login.c: check_login(): Bugfix: call legal_range() after
init_player_skills() - we can't handle range_skill correctly if skills haven't
been initialized.
* server/login.c: check_login(): Bugfix: Check return value of legal_range(),
and reset op->contr->shoottype to range_none if range was invalid.
* server/login.c: check_login(): Bugfix: Don't call fix_weight() - fixing
the weight of _all_ players isn't necessary.  Just initialize op->carrying
directly with sum_weight() instead.  This also removes the problem of
updating the weight of an object that hasn't been sent to the client yet.
* server/login.c: check_login(): Bugfix: We need to call fix_player()
(init_player_skills() needs this, and it also makes the code more robust).

* server/apply.c: apply_altar(): Bugfix: Print altar's message before
casting the spell.

* server/spell_util.c: move_cone(): Use copy_owner() instead of set_owner()
and manually correcting the skill and experience object pointers.
* server/spell_util.c: cast_cone(): Don't set FLAG_FLYING - the archetype
needs to have this anyway for move_cone() to work properly.  Instead, print
error messages if FLAG_FLYING, FLAG_WALK_ON or FLAG_FLY_ON are missing.

* server/apply.c: move_apply(): TRAPDOOR: Bugfix: Multiply by op->nrof when
calculating the weight.

* randommaps/standalone.c, server/apply.c: fix_auto_apply(): Bugfix: Don't
call check_trigger() for objects of type TRIGGER.  For other trigger types,
call check_trigger() only if there is an object above the trigger.
This can be used to implement doors that are only open shortly after the map
has been loaded.
* common/button.c: check_trigger(): Many changes.  The triggers should now
behave as described in crossfire.doc.  -> This breaks maps that rely on old
buggy behaviour.

* server/monster.c: monster_apply_below(): will_apply & 1 now also applies
TRIGGER objects, not only HANDLE objects.  Allows an interesting solution for
/asyvan/gate9 if there is no second player who can open the middle grate.

* common/button.c: check_trigger(TRIGGER_PEDESTAL) and update_button(PEDESTAL):
Bugfix: Handle objects with heads correctly.

* server/c_object.c: drop_object() and socket/item.c: look_at(): Bugfix: If a
player is moved on top with remove_ob()/insert_ob_in_map(), FLAG_NO_APPLY must
be set temporarily.
* common/object.c: remove_ob(): Bugfix: Don't call move_apply_func() if
FLAG_NO_APPLY is set.

* server/apply.c: manual_apply(): Don't call apply_special() for objects
that are not in the inventory.  Return 2 in this case.
* server/apply.c: player_apply_below(): Skip objects for which manual_apply()
returned 2.

* server/apply.c: apply_spellbook(): Bugfix: Don't give experience for items
with FLAG_STARTEQUIP.

---------------------------------
--- END apply() cleanup patch ---  Jan Echternach 26/5/2000
---------------------------------

server/input.c:  modify examine_monster to use the maxhp field instead of
the arch hp field to determine healthiness of the monster.  Also, give
this information for all creatures, not just monsters or players.  
MSW 5/23/200

socket/item.c:  Add MAXITEMLEN define at top of file and use that to determine
    at what point item commands should be broken up.  Prior hard coded value
    was not always large enough.  MSW 5/23/2000

include/define.h:  add safe_strcat inline/static function.  Add
    DESCRIBE_ABILITY_SAFE and DESCRIBE_PATH_SAFE which use the safe_strcat
    to prevent buffer overuns.
common/item.c:  Have query_name use HUGE_BUF for its buffer - query_short_name
    uses that buffer size, and we call the same thing.  have quer_name and
    query_short_name use the safe_strcat function.  Increase buffer size
    in ring_desc to be a VERY_BIG_BUF and also use safe_strcat along with the
    DESCRIBE_*_SAFE macros.
server/input.c:  Modify examine.c to not get buffer overruns for very long/
    complicated items.  Modify long_desc to also handle long names/descriptions
    without buffer overruns.
socket/item.c:  Modify the functions that prepend the length to the name
    of the object to handle very long (>255) object names properly - now we
    just truncate it and only send the first 255 bytes.  add function
    add_stringlen_to_sockbuf to make this task easier.
With the above changes, very long named items/items with very long
descriptions works properly in both the server (no crashes) and the
client (no crashes/protocol errors)  MSW 5/22/2000

common/item.c: Modify query_short_name to avoid buffer overflow on long
ring descriptions.  Also, increased size of buffer in this function so
that longer ring descriptions will not get truncated.  MSW 5/22/2000

server/c_chat.c: Add standard banner to top of file.  Fix say command so
that it does not crash the server if something beyond 256 characters is
spoken - extra data is just truncated.  MSW 5/22/2000

common/object.c:  Splitted set_owner() into set_owner_simple() and
set_owner().  copy_owner(): New function.
server/spell_util.c: explode_object(): Use copy_owner() instead of setting
skill and experience objects manually.  Bugfix: Don't use op->owner
directly (fixed by using the caster in call to SP_level_dam_adjust(),
not the owner, which was wrong anyway).
server/spell_util.c: fire_arch_from_position(): Use copy_owner() instead
of set_owner() if 'op' isn't the real owner but only a spell object
owned by somebody else.
server/spell_util.c: move_swarm_spell(): Use the swarm spell object as
the owner in call to fire_arch_from_position(), which now handles this
case correctly.
server/spell_util.c: fire_swarm(): Call tailor_god_spell().
server/gods.c: determine_god(): op->type==SWARM_SPELL is a spell.
server/gods.c: tailor_god_spell(): op->type==SWARM_SPELL is a spell.
Always abort function if we couldn't find a god.  Always add god's
attacktype if the spellop's attacktype has AT_GODPOWER.
- Jan Echternach 22/5/2000

common/init.c, common/loger.c, include/logger.h, server/init.c:  New
log level llevInfo which is the new default log level.
Many other files:  Use llevInfo instead of llevError where appropriate.
Use 'settings.debug >= llevDebug' instead of 'settings.debug'.
- Jan Echternach 21/5/2000

server/main.c:  Use a marker object to track current position in the list
of active objects.  Using a pointer didn't work because all objects on
that list can be removed from it by process_object().  One of the things
this fixes is bogus "Free object on list" errors.
- Jan Echternach 21/5/2000

crossedite/Makefile.in:  Modify to use $(MAKE) instead of make when 
descending into subdirectories - fixes compilation on FreeBSD - MSW 5/17/2000

socket/init.c:  Fix incorrect check on return value from fread when
loading xpm images.  MSW 5/17/2000

Fix server/spell_effect.c - was assigning altar->other_arch to an object
and not archetype MSW 5/16/2000

server/spell_effect.c: magic_wall():  Duration of darkness spell now
implemented with op->stats.food.  This avoids problems with very low
speed values that were interpreted as infinite duration.
lib/spell_params:  Changed duration parameters of darkness spell to
give a reasonable duration with the new formula.
- Jan Echternach 16/5/2000

common/living.c: drain_stat():  There are 7 stats now, not 6.
- Jan Echternach 15/5/2000

server/rune.c: rune_attack():  Check that victim still exists after
hit_player() was missing.  This fixes server crashes if monster applied
a chest, found a diseased needle and was killed by it.
- Jan Echternach 15/5/2000

server/spell_effect.c: cast_charm():  out_of_map() check was missing.
This fixes server crashes when a player casted this spell near the
edge of a map.  - Jan Echternach 15/5/2000


Make image files and code more generic.  This was largely done to make
adding support for png files easier, but in reality, it means adding support
for any new file format is now trivially easy.  Format of the image
file is:
IMAGE <image num> <datalen> <image name>\n
followed by the image data.
This allows support for binary image formats (png), but also means that
the server doesn't need to know anything about the image format - rather
it is all just data as far as the server is concerned.  I think this
actuallyy loads the xpm data a little faster - it would make sense that
it should, since it just reads all the data in with one fread instead
of parsing it line by line waiting for the end image delimeter.
Note:  While png images are loaded, they are currently not supported
in the client nor will the server send them - that is the next step
in the work, but that will require just a few minor changes to the
server - most of those change will be in the client.

crossedit/xutil.c: Merge bitmap & pixmap load routine into one called	
    ReadImages, function modified to use above format.
crossedit/App.c: Call ReadImages to load images.
include/newserver.h: Change FaceInfo structure to have arrays of data
    and datalength instead of explicity entries for pixmap vs bitmap data.
lib/adm/make_xpm_file.pl, lib/crossfire.cfb, lib/xbmtobdf.c: Removed -
    either note needed or replaced by new naming scheme.
lib/adm/collect_images.pl:  Replacement/improvement of make_xpm_file.pl
    above - this handles all image formats (xbm, xpm, png).  This is
    also more intelligent in that it will not try to rebuild the image files
    if there is not a valid arch directory.
lib/crossfire.png, lib/crossfire.xbm (new files):  .png file is for png
    images.  xbm is to keep with the new standardized naming convention used
    and is for the bitmaps.
lib/crossfire.xpm:  New format used in file.
lib/Makefile.in:  Modified to collect via new script as well as new
    directives to collect (png files).
socket/init.c: Modified to load with the new format and data structures.
socket/request.c: Modified to send data with the new data structures
    provided.

End of image changes, MSW 5/13/2000

configure.in, configure:  Add check for perl so that we can call scripts
properly - MSW 5/13/2000

common/re-cmp.c:  Add some tolower calls in the comparisons so most
regular expressions should not be case insenstive (makes matches & says
work better).  Note that I did not change the behaviour on range matches
(Z-f for example), as I thought there may be side effects in that case.
MSW 5/8/2000

socket/request.c:  Add length checking to NewPlayerCmd so that if the client
sends us a really long command, we just truncate the end of it and not
overwrite our internal buffers causing crashes.  MSW 5/8/2000

server/player.c: add out_of_map check to stand_near_hostile function.  This
fixes a server crash if the player uses a hiding skill near the edge of a map.
MSW 5/8/2000

common/arch.c, common/loader.l (loader.c):  Modify the load routines
to strip off trailing whitespace in object names and other_arch fields -
I believe this is why altars to Sorig did not generally work, and while
generally that white space should not exist, doing a little extra checking
for it is not a bad idea - MSW 4/26/2000

Add HOLY_ALTAR type, and use that for praying over for gods and the
like.
doc/crossfire.doc:  Add description of HOLY_ALTAR type and meaning
	of fields.
common/map.c:  Disable consecration code for altars.
include/define.h: Add type for HOLY_ALTAR
include/sproto.h: Update for change of some functions below.
server/c_wiz.c:  Modify setgod command to call become_follower with
	proper second arg.
server/gods.c: Change become_follower to take object pointer to god instead
	of name, since the holy_altar has the pointer in its other_arch.
	Modify pray_at_altar to use the new fields, as well as fixed
	what seemed to be numerous bugs in that function.
sever/skills.c: Change check from ALTAR to HOLY_ALTAR, also change
	check to see if HOLY_ALTAR is consecrated by looking at the
	other_arch field.
server/spell_effect.c:  Update consecrate so that caster must be
	higher effective level than the altar, also update for
	differing fields.
maps/thomas/sisters/shrine0, map/thomas/sisters/tower0:  Remove
	title from altars on these maps - these were the only two maps
	using old style altars consecrated to a god.  Since it appears the
	real purpose of the altars on these maps was to trigger something
	else, they were kept as old style altars.
arch/gods/altars (relocated from arch/indoors, as I think the new
	location makes more logical sense):  Update for new fields/format.
	This also affects lib/archetypes, lib/bmaps.paths, lib/crossfire.xpm,
	lib/crossfire.cfb
lib/adm/archsearch.pl:  Modified to hunt out old archetypes - some of the
	changes could be useful in general cases.
MSW 4/26/2000

server/spell_util.c: Fix move_golem so that multi square avatars (golems)
don't hit themselves.  Remove will_hit_self function (only used in
move_golem), since it did not work.  Change structure & indenting of
move_golem function so it isn't quite so nested - functionality
remains the same.  When we do find something to kill in move_golem,
call attack_ob against it instead of hit_map - hit_map is not save
for multi object hitters.  MSW 4/24/2000

Key usage change:  Add new command 'usekeys' that specify how keys
are searched for. The three options are inventory, keyrings, and containers.
These options apply to both standard keys and special keys.  If the player
has a key for the door but it is in a container that will not be used,
print a friendly message of the key name and container name.  Files
affected:
help/usekeys: Added describing options
lib/Makefile.in: Addition of help/usekeys above.
include/player.h: Add new enumeration and entry into player structure
include/sproto.h: New function prototype
server/apply.c: change of Find_Key to new function with slightly 
	different options
server/c_misc.c: add function to support 'usekeys command.
server/commands.c: addition of usekeys command
server/player.c: rewrite & rename of find_key command, as well as changes
to move_player_attack
Mark Wedel 4/21/2000

server/spell_effect.c: create_bomb():  New spell_type parameter, merely
for consistency with itself and with other spell casting functions.
- Jan Echternach 4/19/2000

server/spell_effect.c: create_bomb():  Set level of created bomb.
Fixes the problem that the splints were casted without a level.
- Jan Echternach 4/19/2000

lib/checkarch.pl:  New perl script to check the archetypes file for
obvious bugs (like object that is alive but doesn't have a level).
- Jan Echternach 4/17/2000

include/spellist.h:  "meteor swarm" is now a missile spell (PATH_MISSILE)
just like "comet".  - Jan Echternach 4/17/2000

server/spell_util.c: path_level_mod():  Rewrote to fix countless bugs.
New interface with explicit base level parameter.
server/spell_effect.c: finger_of_death():  Call path_level_mod() with
correct base level.
server/spell_util.c: casting_level():  New function that combines
SK_level() with path_level_mod().
- Jan Echternach 4/17/2000

server/spell_util.c:  Several cosmetic changes (spell type parameter name
is spell_type, arch_to_object(get_archtetype(...)) is equivalent to
get_archetype(...), use casting_level() if applicable).
- Jan Echternach 4/17/2000

server/spell_util.c: fire_swarm():  New 'caster' parameter because
owner and caster can be different.  Level of the swarm object is casting
level of the caster, not overall level of the owner.
server/spell_util.c: fire_arch_from_position():  Set level of fired
arch to casting level of caster.
server/spell_util.c: cast_cone(), cast_smite_spell(): Set level of spell
object to casting_level() and not SK_level() to honour path_attuned and
path_repelled of the caster.
server/spell_util.c: move_cone():  Just copy the level for new cone
objects.

Missing level meant AT_DEATH didn't work, missing call to
path_level_mod()/casting_level() meant path_attuned/path_repelled was
ignored.  - Jan Echternach 4/17/2000 

server/player.c: fire_bow():  Set level of fired arrow.  Arrows with
AT_DEATH are now working.  - Jan Echternach 4/17/2000 

server/player.c: fire():  Call check_skill_to_fire() even for wizards
because this function has the important side effect of setting the current
skill and experience objects.  - Jan Echternach 4/17/2000 

server/skills.c: do_throw(), server/time.c: stop_arrow(), server/player.c:
fire_bow():  Flying arrows and thrown objects have FLAG_NO_PICK set because
picking these objects is currently broken (and maybe it shouldn't be
possible anyway - picking up a _flying_ arrow?).  - Jan Echternach 4/17/2000 

server/c_wiz.c: set_god():  Didn't work at all because it was trying to
set the current player as his own god.  - Jan Echternach 4/17/2000 

server/map.c: check_path():  Return value was wrong if the name did not
refer to a regular file.  A symptom of this bug was that the server crashed
if a wizard tried to enter a directory with the 'goto' command.
- Jan Echternach 4/17/2000 

server/map.c: open_and_uncompress():  Check that the file we have opened
is (still) a regular file, fail if it's not.  This is the right place
for such checks if we want to avoid race conditions (e.g. file replaced by
directory while trying to open it).  - Jan Echternach 4/17/2000 

c_party.c commands.c daemon.c disease.c gods.c spell_effect.c spell_util.c:
Cosmetic fixes - updates to rcsid string to include right file name as well as
updates to mail address and/or additions to top banner.  Mark Wedel 4/13/2000

Various files:  Updated my mailing address to be accurate - Mark Wedel
4/13/2000

doc/playbook/handbook.idx:  Automatically generated file removed.  This
is not something normally included in packed up distributions, so no reason
to have it in CVS - Mark Wedel 4/13/2000

doc/include_html.pl, doc/playbook/make_index.pl, doc/spoiler-html/makeps.pl,
lib/adm/make_xpm_file.pl:

Change to use /usr/bin/perl instead of /usr/local/bin/perl - real change is to
find perl in configure.in and call the scripts with that.  Mark Wedel
4/13/2000


server/input.c:  Don't try to calculate spellpoint costs for denied spells,
because these are undefined and are now causing lots of BUG messages.  Also
improved formatting: spellpoint costs can be > 99, and don't fill everything
with zeros, use spaces instead.  Patch by Jan Echternach, applied & checked in
by Mark Wedel, 4/12/2000

server/skill_util.c:  Fixed some log messages that were lacking a newline at
the end.  SK_level():  Rewrite of this function to simplify its structure.
Print error message if we find an invalid level.  Add top copyright/contact
banner (msw) Patch by Jan Echternach, applied & checked in by Mark Wedel,
4/12/2000

server/apply.c, server/monster.c:  Fix in apply.c for encounter maps
so that proper message is generated, and differentiate behaviour if it
is a floor vs not a floor.  Also, change to both files in that apply_below
stops at the floor object.  Patch by Jan Echternach, applied & checked in by
Mark Wedel, 4/12/2000

server/apply.c, doc/crossfire.doc:  Fix to prevent server crashes when monster
applies poison object.  doc file is updated to include accurate information on
values in poison object.  Patch by Jan Echternach, applied & checked in by
Mark Wedel, 4/11/2000

CREDITS, server/main.c:  Add Peter Gardner to list of credits.
Mark Wedel 4/4/2000

server/apply.c, improve_armour():
Maximum armour value reduced to 90.  Items can now always be improved up
to this value.  For armour x you need level x, not level x + 1 as before.
esrv_send_item() and fix_player() also called if only magic value was
improved.  Patch by Jan Echternach, applied & checked in by Mark Wedel,
4/4/2000

server/attack.c, attack_message():
More messages.  "grind to dust" is more damage than "shred to pieces".
Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/4/2000

server/spell_effect.c, magic_wall():
Fix calculation of duration of darkness spell.  Before, you could get
huge negative speed values with high experience levels, which meant very
short duration.
Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/4/2000

server/spell_util.c:
1) New argument of fire_swarm() to specify whether it's a magic attack.
All swarm spells except meteor swarm are now magic (just as the
underlying basic spell).
2) New function fire_arch_from_position() which doesn't use the owner's
position as the starting position of the fired arch.
3) move_swarm_spell(): Correctly set owner and magic in call to
fire_arch_from_position().
4) Above changes fixes "cause many wounds" spell
Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/4/2000


common/map.c: Change calls in file to use insert_ob_in_map simple.
This fixes bugs with buttons not being applied correctly when the map
is loaded - the cause is that push_button is getting called for the
button before all the objects the button is linked to have been loaded.
Then when the map finishes loading, the call to update_button is called
and they are not in sync.  This change should make loading slightly faster,
mostly because it does not call check_walk_on during the loading, so that
buttons don't get pushed/changed around.  Mark Wedel 3/28/2000

server/player.c:  If player is using pickup mode 6, only have them pick up
the item if they know it is magical.  Prior to change, items would be
picked up if they are magical, but not if the player knew that, so the code
was giving extra knowledge to players.  Bug reported by Kurt Fitzner,
checked in by Mark Wedel, 3/26/2000

common/map.c:  Code fix by Kurt Fitzner so that unique maps will get
compressed if so needed.  Fixes problem of unique maps not being
able to get reloaded as they are saved with the compress suffix but
not in compressed form.  Code checked in by Mark Wedel, 3/26/2000

server/skills.c, server/spell_effect.c: Improve behaviour when identifying
items - the identify routine already updates the client if it is
in the players inventory, so only send update to client if the item is
on the map.  Also, do full item update, as many fields may change, and
that is what the identify function does.  Standard top of
file banner also added to skills.c file.  Fixes problem of
objects in inventory being displayed with two numbers in from
(ie, two two bows +1).
Bug and initial fix of item updates by Kurt Fitzner, 
implemented in a bit different way by Mark Wedel.  3/26/2000

Makefile.in, doc/Makefile.in: Modified so that making the docarchive
now works.  The make must be done from the top level for it to work, since
some values are passed, but the doc/Makefile.in was missing some declarations
and had some other fixes that needed to be done.  msw 3/22/2000

------------------------------------------------------------------------------
Changes for 0.95.5:

Makefile.in: comment out the EXTRA_FLAGS (which contains the -Wall
entry) - the presumption that everyone is going to use gcc to compile
crossfire is a poor one, and -Wall is only supported on gcc.  I would
rather have it compile on the maximum number of systems without it
needing changes than to require the end user to make the customizations.
A better long term solution is to have configure.in check for gcc or
if -Wall is supported it and have it add it in.  msw 3/21/2000

server/c_object.c: Fix pick_up_object function to deal with non players
picking up objects - prior to fix, program would crash when monsters
pick up objects.  Also, add standard banner at top of file about
copyright, contact, version information.  msw 3/21/2000

CREDITS, README: Updated to contain my new mailing address.  In reality,
almost all the files have an out of date address for me, but these
are probably the ones people will look at most.  README also updated
with new ftp location.  msw 3/20/2000

include/Makefile.in: Update files to include material.h - need when
packing up new releases - msw 3/20/2000

doc/hanbook.ps, doc/spoiler.ps, doc/spoiler-html/spoiler.html:  Rebuilt with
latest version of crossfire - not sure if there are any content changes, as
the tools to build the file have been updated on my system, causing many
changes to the prologue and outputted data. - msw 3/20/2000


Change doc/spoiler-html/Makefile.in and doc/playbook-html/Makefile.in to use
$(datadir) instead of $(C_LIBDIR). Other add AWK and INCDIR lines so that it
properly builds with autoconf setup. msw 3/19/2000

Change spoiler.tex, handbook.tex to build properly with later versions
of tetex - added language specifier when using the babel package.
msw 3/19/2000

Add missing doc/playbook/fig directory to the CVS reposistory -
msw 3/18/2000

Change summon_cult_monster code so that it will no longer summon big monsters
on top of walls or the player.  Also, if there is not space for a big
monster, try to find another pet monster that will fit in the space.
File affected: server/spell_effect.c - msw

Change gorokh.arc to use anim devil instead of anim Lucifer - fixes crash
when using avatars of gorokh - msw

Split off kill_player function from do some living, and check for player
death upon player login.  This splits up an otherwise very large function,
but more importantly, the second point allows NOT_PERMADEATH to work as
expected when the player is dead when logged out.  Previous, the if the
player was dead when they logged out, it would just kill off the character
permanently (without grave marker or anything), even in NOT_PERMADEATH
mode.  Also, cleaned up player load code to remove code that supported
very old style save files.
Files changed: server/login.c server/player.c include/sproto.h - msw

Change NO_STAT define in living.h,skillist.h,skill_util.c to NO_STAT_VAL
to remove conflict on AIX systems. - msw

Fix error in configure.in - was referancing BZIP2, when it should have
used BZIP - msw 2/7/2000

server/skill_util.c: Fixed spelling of unwield
configure.in: Update -z checks to not use eval, double quote the variable.
This seems to be needed on solaris and probably other systems.
Both changes commited by Mark Wedel, 2/7/2000

---SMALL BUGFIX--- John Cater 5/11/1999
server/attack.c:
- changed the logic in hit_player to attack enemy races with holy word 
playtested


---BEGIN BATCH UPDATE--- DAMN 9/17/1999
server/alchemy.c:
- minor cleanup

server/apply.c:
- split multiple lighters

server/attack.c:
- vulnerability gives -4 to saving throw against non-damage attack effects
- immunity to acid reduces the probability of corrosion
- immunity and protection and not vulnerability to acid prevents corrosion
- magic bonus improves item's saving throw against acid
- vulnerability to drain doubles rate of exp loss, protection halves rate
- holy word slaying is checked in hit_player, no need to double-check
in hit_player_attacktype
- prot:magic and vuln:magic affect all magical damage, not just raw magic
- Holy Word and Turn Undead affect undead at half strength if they're not
listed as an enemy race
- Holy Word and Turn Undead have no effect on undead if they're listed as
a friendly race
- minor bugfix/cleanup

server/gods.c:
- minor bugfix/cleanup
- luck slightly improves chance of divine intervention

server/input.c:
- fixed typo

server/main.c:
- trivial bulletproofing, probably no effect

server/player.c:
- sp regen penalty from armour calculated in fix_player instead of being
recalculated for each spell point gained.

server/shop.c:
- payment will come from open pouches if you don't have enough in your
top-level inventory
- money for sold items will go into open pouches until they're full,
then overflow into top-level inventory

server/skills.c:
- minor bugfix in throwing
- writing in one of a stack of books seperates one book out first

server/spell_effect.c:
- generalized staff_to_snake to animate_weapon

server/spell_util.c:
- Staff to Snake, Dancing Sword, and Animate Weapon spells now all use
animate_weapon function
- holy golems avoid damaging their owners
- raw mana spells

common/living.c:
- minor bugfix
- fix_player now calculates sp regen penalty from armour

common/readable.c:
- spelling fix: grimore -> grimoire

doc/crossfire.doc:
- minor edits

include/defines.h:
- moved object type numbers to object.h
- moved flag numbers to object.h
- moved NROFREALSPELLS to spells.h
- moved path numbers to spells.h
- moved DESCRIBE_PATH macro to spells.h
- moved ARMOUR_ and WEAPON_ macros to player.h
- moved player state numbers to player.h
- moved monster movement numbers to living.h
- moved NROFSKILLS to skills.h

include/global.h:
- #defines from spells.h and material.h loaded early

include/object.h:
- now has the #defines for object type numbers

include/skills.h:
- moved NROFSKILLS here

include/player.h:
- added gen_sp_armour variable

include/spellist.h:
- added mana spells, Dancing Sword, and Animate Weapon

include/spells.h:
- moved NROFREALSPELLS here and updated it
- now has the #defines for spell path nummbers
- added mana spells, Dancing Sword, and Animate Weapon

include/sproto.h:
- added animate_weapon and pay_from_container prototypes

include/material.h:
- new

lib/spell_params:
- added entries for mana spells along with their fire equivalents

lib/formulae:
- minor spelling fixes to match minor spelling fixes in artifacts

lib/artifacts:

Weapons
- Sanwe -> Gnarg (any weapon)
  chance 5, value x10, magic 0, dam 120%

- Lythander (any weapon)
  chance 5, value x20, magic 0, luck +1, weight 90%

- Gwormi -> Gaea (wooden weapons only)
  chance 20, value x50, magic 2, regen +1, dam 110%

- Slay Demon -> Valriel (any weapon)
  chance 15, value x30, magic 2, weapon speed 120%, slaying demon

- (new) Gorokh (any weapon)
  chance 15, value x30, magic 2, weapon speed 120%, slaying angel

- (new) the Devourers (any weapon)
  chance 8, value x30, magic 1, attacktype: physical, cold, depletion

- (new) Mostrai (axes and hammers only)
  chance 10, value x12, magic 1, dam 140%, weight 115%

- (new) Sorig (metal weapons only)
  chance 5, value x15, magic 1, weight 95%, weapon speed 125%
  attacktype physical, electricity

- (new) Ruggilli (metal weapons only)
  chance 5, value 15, magic 1, weight 85%, weapon speed 110%
  attacktype physical, fire

Helmets (moved to after weapons, with the rest of the armour)
- Lordliness -> Valriel (full helm only)
  chance 20, value x50, magic 2, Wis +1, Cha +1

- Uriel -> Sorig
  chance 10, value x20, magic 1, ac +1, armour 120%, prot electricity

Shields
- Theodin -> Mostrai
  chance 8, value x24, magic 1, prot fire

- Gnarg
  chance 8, value x12, magic 1, ac +1, armour 180%, Cha -1

Gauntlets
- (new) Sorig (gauntlets only)
  chance 15, value x75, magic 2, armour 10, weight 125%, attack: electricity

- (new) Sorig (gloves only)
  chance 10, value x10, magic 1, armour 5, weight 125%, prot: electricity

Armour
- (new) Valriel (plate and scale only)
  chance 6, value x20, magic 1, armour 120%, weight 110%

- (new) Gorokh (plate and scale only)
  chance 6, value x15, magic 1, ac +2, armour 110%, weight 105%

- (new) Ruggilli (plate, scale, or dragon armour)
  chance 10, value x55, magic 3, ac +1, armour 120%, weight 90%, prot: fire

- (new) Gaea
  chance 10, value x25, magic 2, ac +1, armour 120%

Cloaks
- (lesser version of cloak of the Underworld) the Devourers
  chance 3, difficulty 3, value x50, magic 3, weight 50%, material 0, Cha -2,
  prot: acid, drain, ghosthit, depletion

Bows
- (new) Valriel
  chance 10, value x15, magic 1, weight 110%, damage 200%

- (new) Gorokh
  chance 15, value x15, magic 2, damage 160%, attacktype: physical, acid

- (new) Lythander (not crossbow)
  chance 10, value x22, magic 1, weight 75%, wc +1, speed 150%

- (new) Ruggilli (crossbow only)
  chance 10, value x18, magic 2, weight 85%, wc +1, speed 110%,
  attacktype: fire

- (new) Sorig
  chance 12, value x20, magic 2, weight 95%, wc +1, speed 125%,
  attacktype: electricity

- (new) Mostrai (crossbow only)
  chance 5, value x50, magic 3, damage 140%, speed 75%,
  attacktype: weaponmagic

- (new) Thunder
  chance 10, dificulty 5, value x10, magic 2, weight 90%, damage 150%, wc +2
  attacktype: physical, slow, paralyze

...and a few minor spelling fixes

---END OF BATCH UPDATE--- DAMN 9/17/1999

Add crossfire.oc.humbug.org.au server information to README file - msw

Change compress method definitions from being determined by checks
on system type to having autoconf find the utilities for us.  Also, add
bzip2 support. Files affected: Makefile.in configure.in common/map.c
server/init.c server/login.c include/config.h include/define.h
include/autoconf.h.in - msw

Fix in server/rune.c - if the victim of a trap/rune is not on a map
and the object has a disease, it would crash the server.  Temporary
fix put in to make sure there is a map, and if not, use a predefined
difficult of 1.  I think the real issue is how can an object not on a map
be setting a trap (in this particular bug, reported by Klaus Elsbernd,
the victim was a thrown object) - msw

Change by dragonm@absolut.tegris.org - improve crossedit so that if you
try to load a map you alreay have in memory, it will raise the window - 
it will also give you the option to forget, save changes, or just raise
the window if the in memory version of that map has been modified.  Checked
in by msw. (crossedit, App.c, Edit.c, Edit.h)

Bugfix in server/apply.c - apply_container()
  When checking for keys to locked containers, only searched player's
  inventory, not keyrings.  Changed to use FindKey function in player.c,
  which does search keyrings.
  --DAMN

Bugfix in server/main.c - enter_exit()
  Unique maps were using their actual location as a path for moving to
  a new map.  They need to use the location of the original map, not
  the character's individual copy of it.  This is re-constructed from
  the individual map's filename, which is based on the original path.
  --DAMN

Remove xbmtobdf man page - since it is run automatically and it is likely
that people will not run it manually (and it appears to be innacruate - or
at least imcomplete), may as well remove it.  - msw

Change install location of man pages to section 6 instead of section 1 - msw

New man page submitted by Egbert Hinzen that is actually correct and
accurate as the options now relate to crossfire. - msw

    This one is a suggested fix for the alchemy bug that grants obscene
    amounts of experience for certain formulas.  Those formulas are the ones
    that create items with a high fixed level, because those items are
    pretty worthless otherwise.  Dust of Repelling Undead, for example, is
    level 30.
        The fix I implemented here is to base the chance of success largely
	on the level of the product, so it's very difficult to produce
	something like Dust of Repelling Undead, and therefore worth the
	extra experience.  The chance of success is now based on the
	following factors:
	1) level of product
	2) number of ingredients in formula
	3) rarity of formula as listed in "formulae" data file
	4) number of batches being made
	5) Alchemy skill (if present)
	6) enchantment of cauldron
	7) luck

patch from DAMN
This one makes a couple things level dependent that used to be fixed:
1) time it takes Word of Recall to take effect
2) amount of energy transferred by Transferrence spell
3) percentage of energy drained by Magic Drain spell

Also, the following effects have been modified:
1) Followers of a cult that considers undead enemies have a penalty to
Command Undead.
2) Magic Drain gives back to the caster a small portion of the energy
drained from the victim.

And a bug was fixed:
1) SP_level_dam_adjust used and SP_level_strength_adjust used the
player's level, where they should have used the caster's level.
  --Patches from DAMN, applied by PeterM

Marker object added, alchemy modified so that recipes
can require keycodes and MARKS to execute, detectors modified
to be able to detect MARKS, and all of this documented in
crossfire.doc  --PeterM

server/gods.c  --  changing gods now costs players their special
			prayers. --PeterM
server/alchemy.c  --  levels less than ten no longer produce
		cursed items, but only slag or nothing.  --PeterM
server/shop.c  --  unidentified stuff is worth at most 60gp or so. 
  ---PeterM

random_maps/style.c - fix type in the scandir function which cause
compilation problems for those systems that actually need it. - msw

Change command_cast_spell so that it preserves a return value from
find_spell.  This re-enables partial spell matching (ie, cast prot
will show all spells that start with that.) - msw

------------------------------------------------------------------------------
Change for 0.95.4:

Add better comment in config.h about the DM_MAIL option - msw.

Fixed and doc/playbook/Makefile.in doc/spoiler/Makefile.in so it works with
autoconf setup.

Updated to properly generated handbook.ps when needed - msw

doc/crossfire.doc: Updated with disease code notes, detector notes.

crossedit:  Fix in edit.c to ensure map objects (mainly is_floor objects)
are actually removed visually as well as from a pure object standpoint.

Change to save_throw_object:  If object is in players inventory and
is destroyed, send update to client.  This can happen when trying to
ignite something in the inventory with flint and steel - msw.

In apply_lighter, do more accurate check when seeing if the attempted
object was actually destroyed.  Also, cache the item name so that if
it is destroyed, we have a proper name to print out. - msw

fireborns changed to have Pow stat bonus instead of Wis
stat bonus.  --PeterM

Some problems in the random map code fixed: specificially,
  1)  fountains no longer attempted placement outside map
  2)  Ignore files/dirs named CVS when looking for styles.

I changed a few of the maps to have exits to random maps.
I made one random house in Scorn, one random exit in the Hall of Bones
to an undead maze, another exit to a random map in the hole SE of
Scorn, and one in the bottom of the Tower of the Stars. --PeterM


Update lib/Makefile.in to create empty bookarch and temp.maps files as
part of install process. - msw

Change configure.in script so that by default, files will be put in
installdir/var/crossfire and installdir/share/crossfire instead of
just installdir/var and installdir/share.  This allows crossfire to be
installed more cleaning without it having its own top level directory.
Old installation behaviour can be gained by using --enable-old-layout when
running the configure script. - msw

Patch by Carsten Pluntke that fixes a problem with unique maps not being
properly reloaded after being swapped out (main.c) - msw

Fix so that when picking up objects from a container, the client gets
an update to remove the object display from the container (ie, if
you pick up all the gold coins from a container, the total in the players
inventory always got corrected, but the client still displayed some in the
container even if there should not be.)  The change is in c_object.c - msw

Check that hitter has a valid name before it attacks - fixes some
crashes (attack.c) - msw

Enhance lib/collect.pl to ignore CVS directories - msw.


Improve auto_apply functions so that it will create treasures (random_*
items) inside other objects.  There is still a limit in that it will only
look for these objects inside other top level objects - a random potion
inside a chest inside a monster will not be processed.  But that
should be a rare case, and nesting containers very deep has never been
well supported in the code.  The code affects is in the apply.c file. -msw

Add Xaw to start of libraries when linking crossedit - fixes focus problem.
File affected configure.in - msw

Fixed a bug in the "depletion on death" code.  The depletion
never had any stat removal specified.  --PeterM

Remove berzerk code/variable from player structure.  The code had
no effect - whatever functionality it once had has been removed in the
past. - msw


Add flag save information for FLAG_CLIENT_SENT that was otherwise
missing (loader.l).  This fixes the disappearing archetype bug - msw


Fixed buffering bug in lowlevel.c
  --David

------------------------------------------------------------------------------
Changes from Crossfire 0.95.2 to 0.95.3:

Fixed missing god animations in the archetypes.

SIMPLE_EXP option added.  From config.h:
 * Define this if you want to use the new (0.95.3) experience system.
 * The system has the following changes:
 *
 * 1) 2000 exp need for second level.  All additional levels are shifted
 *  accordingly.
 * 2) Your stats in your skill categories don't affect the amount of
 *  exp you get.
 * 3) Your level difference doesn't affect the exp you get for killing
 *  monsters.
 *
 * If this commented out, you get the old system.
 *
 * This can also be set by using -simple-exp/+simple-exp as a run
 * time option.


Change treasure lists so that stat improving potions won't show up in
shop.  They should still show up on the ramdom_potion spaces on the
maps (may in fact be slightly more common there than before)

Move socket related code out of server directory and into socket directory
and re-arrange cod so that what is in what file makes more sense.

Code from Peter Mardahl to have death result in stat depletion and
not actual stat loss.  Setable by via STAT_LOSS_ON_DEATH option in config.h
or -stat_loss_on_death/+stat_loss_on_death command line
options.

Patch by Peter Mardahl to change immunity spells from PATH_PROT to PATH_NULL
- this will stop gods from giving out these spells.

Patch by Peter Mardahl so that players will never fumble the reading
of scrolls.  You only get half as much exp for reading the scrolls now
however.

Update the README file - the list of public servers was grossly out of date
and mostly removed.  The instructions for running/playing were out of date,
containing information for servers with the old X11 code.

Change CAN_MERGE so that identified items with different been_applied 
will merge (this is currently done by just setting the been_applied flags
for the object in CAN_MERGE if they have been identified)

Temporary fix for disease code - I was seeing endless loops in weight
contributions because an disease object op->env points back at itself.
In do_symptoms, we check to see if the victim matches the disease we
are about to infect them with, and if so, don't proceed further.  The
cause of this pointer recursion needs to be found instead of
this current fix.

Change daemon.c so that hpux systems can also use ioctl (.., TIOCTTY, ..)
call in addition to SYSV systems.

players and logs command added.  players show all current player names
currently in use, logs show sockets that are currently listening for
kill log information.  Add limited support for some commands from
the socket (hiscore, logs, maps, motd, players, version, who).
After socket has been authenticated to have valid server, shout and tell
also available.  To switch socket into old style mode, first command
entered should be 'oldsocketmode'.  Server code then knows not to
prepend packet length information, so most functions work on this new
socket without any changes.

Add verify_player function to login.c (takes name and password and verifies
they are ok - used for old socket emulation).  Also notify all
players when a player joins the game (this must have gotten removed
at some point).

change prototype for cs_write_string to take a constant string.  In
readpacket, have it read in 100 bytes even if length information looks
incorrect (allows easier initial switching to oldsocketmode).  If
the length of the input buffer is for some reason negative, call abort.

Clean up nconns in socket.c - it was being increased 2 times when
a socket was added, and decreased by 2 when a socket was removed.
Add newline to initial version command so people telneting in for
old socket compatibilty get something a little more presentable.
command char pointer added to newsocket structure - used for player
name or listener html address.  Fix in memory overrun/corruption when
freeing the last allocated socket - it would write data beyond the allocated
data.

if new_draw_info is called to notify everyone, also notify sockets
running in old mode if it isn't a kill log listener.

Update commands.h file so that it won't declare various values if included
multiple times - only the first time it is included will it declare the
values.

Add extern declaration for init_sockets to global.h since other functions
now need to access them.

Who command extended to also show active socket connections without a player
attached.

Kill log (watchable from socket) added.

Add support to use old socket commands on the new port.

Fix by Seikoh Nishita for weapons that slay multiple creatures - before
fix, they would not slay anything (args to strstr were reversed)

Don't give out exp for orating to monsters owned by another player - fixes
abuse since 2 players could quickly orate back and forth and gets lots of
exp.  The orate function was also cleaned up a bit to be more efficient
(presumption is made that there is only 1 monster on any one space, so once
we find one, there is no need to do further processing)

If door is passable, print a message to the player if he tries to
pick the lock and don't let them pick it (examples here are the
doors which you can walk through)

Fix by Seikoh Nishita that should prevent some crashes when exiting
shops - appears that there could be circumstances when i was trying
to referance a null pointer in an error message.

Add popen_local for sgi systems - without this, sgi can only open one
compressed map before it fails to open further compressed maps.

Fix by Timo Kokkonen so that resurrection works with the new player
save method.  This should also fix the problem that dead players when
using PERMADEATH being able to log in after dying.

Allow FORCE objects to increase digestion/hp/sp/grace regeneration.

Remove style.h file, since we now have an automatically generated proto file
from random directory source.  Also fix in makefine to use proper ar
when creating the archive.

Add 'race *' to maps/styles/misc/fountains - this fixes a crash when
entering random maps.

If use presses an incorrect key at the play again prompt, reprint the 
play again question.

Change find_free_spot to return -1 if no spot available, update calls so
check for this return value instead of 0 (value = means current spot
available)

Change pet movement so that pets should no longer jump walls.

Update configure, makefiles, and code to use proper locations of installed
files (no longer $prefix/lib, instead $prefix/share for read only,
and $prefix/var for read/write.

When using a special key to open the door, print a message informing the
player what key was used to open the door.

Minor map cleanups/changes.  Some improper exits changed to point the
right place, extraneous style maps removed due to new gods, other maps
updated to replace now missing altars with their replacements.

Change gate code logic so instead of using speed to determine if the object
can move itself, we instead check the ALIVE flag (this fixes problems for
animated objects, and is a more accurate method in any case.)

Fix by S.Nishita so that containers on the ground get properly unapplied
when player moves off them.

Fix by S.Yoshioka's so that damage for cone spells is calculated properly
as they propogate.

Remove server side referances to INFOLINES and INFOCHARS, since that is now
controlled by the client.

Code cleanup to random map generator to prevent compiler warnings.  
Also, change comparision of val == 0x1 to val-1 = null, since the
later is more portable.

added some missing newlines to log messages in the newsocket.c file.

fix pickup modes some - mode 4 appeared to work ok (pickup all), but mode
5 wasn't working right (pickup all and stop).  I have tested the modes
with the X11 client, and they all appear to work properly.

House of Healing map (with link from starting city) added by Peter Mardahl.

Change player move code so you will no longer swap spaces with a pet
monster/other friendly object is you are braced.

Fix off by one error in the buffering socket buffering code - this would
cause buffer overflows if the data being added equaled exactly the buffer
size+1.  Similar fix when reading in packets

Increase NROFATTACKS to 24 in define.h so the AT_INTERNAL attacktype
work properly.

Patch by S.Yoshioka so that godpower/holyword spells are not magical.

Fix in attack.c by S.Yoshioka to call free_object instead of free for
splitting monsters.

Fix by S.Yoshioka so that magic bullet or other pure magic spells do
damage to other parts of multisquare monsters.

Fix by S.Yoshioka so that you can not get exp in other skills with cone
spells.

Fix by Seikoh Nishita so that magic walsl can not be placed on top of
other walls/monsters.

Fix by Seikoh Nishita so that we don't clear the NO_STEAL flag on 
insert_ob_in_map - this makes singing/stealting from the same monster
multiple times impossible.

Patch by Seikoh Nishita so that boulders will roll off gates.

Have server send updated weight of container when dropping all items from
a container.

New random map decore styles for new religions added.

Patches from James Cameron to fix compile errors/warnings.

Fix missing animations for some of the gods.

Remove *.orig files from maps/picks directory.

Maps updated wtih dtabb 2.60, navar_city 2.40 maps from John Cater.

------------------------------------------------------------------------------
Changes from Crossfire 0.95.1 to 0.95.2:

speed_left values should not be changed when loading/saving maps with the
editor.

Map updates from Anthony Tyson and others (990128 version)

Note:  I was unable to reproduce the staff to snake killing the client bug.
If still in this client/server release, please let me know.

Set player->count in esrv_move_item when picking up objects.  This fixes
a bug introduced in 0.95.1 for the improved pickup code which only allowed
picking up of all the objects on the ground.

lifesaving items should now disappear from client inventory after they
are used.

Improve decrease_ob_nr so that items dropped on the ground will get removed
from the players inventory if they are used up (fixes bug where you drop
the last of some item on an altar but it would not disappear from your
inventory)

Add check to add_exp so that we don't add experience to non living creatures.
This should fix the thrown objects getting lots of speed bug.

Random map code by Peter Mardahl added.  Various changes made so it will
compile on non gcc systems as well as non bsd systems.

Another fix for pits (holes) so objects should drop through.  The fix
in the last release made fixed a possible infinite loop, but also made
it that once an object on the pit could not drop through, no other objects
on the pit would drop through.  The change made will attempt to drop all
objects through the pit, but also not run into a problem with infinite loops.

Update pedestal and detector code to also match on the lockcode of the
special keys.

Change detector function to call push_button instead of update_button.
The later would only change the state of buttons, which doesn't do much
good when you want to open a gate.  push_button will cause gates and
other connected objects to open.

Change move_gate so that it won't roll off things like grass or other
immovable objects.

Update configure script to check for scandir function (needed by disease
code) - if not found, then check in -lucb.

Disease code from Peter Mardahl added.

add break value in while loop in generate artifact message (readable.c) so
we eventually break out if no match is found.

reduce minimum supported map size in crossedit to 1x1

Don't let characters be easily saved on unholy ground.  Player can't issue
'save' command when on unholy ground, and we don't autosave if on unholy
ground.

Improve pickup code mode 6 (pickup magic item) - call is_magical to
determine if an item is magical instead of relying on known_magical flag.

If the player has a marked item in need of identifying, identify that 
specific item first when an apply altar is used.  This allows a player
to selective choose what to identify.

Fix in apply code between server and client.  Containers on the ground
now work properly.  Server side simplified a bit, and updated to be a bit
more bandwidth efficient (use update item to open/close containers.)  Client
updated to handle updating its container status via the update commands.

Fix in pay_for_item in that it will not mistake kobans or other coins for
gold coins when making change (or converting the older coins into new
coins with the same arch but with a different value)

Have player swap places with pet monster even if player no longer has peacful
set.

At confirmation when player quits, inform them that quitting will delete
the chararacter.

When a weapon is improved by the god, if it had no prior attactkype set,
give it physical attacktype in addition to what the god gives it.

By default, make new players peaceful.

Fix up the fire cancellation function - it seems some of the code wasn't
quite right (inserting in map vs setting the owner.)  The fix should 
prevent some core dumps this could have caused.

Fix for main loop in socket.c that should prevent infinite loops when
a socket dies in some improper way.  It should now drop the connection
properly and continue with processing.

Autoconf fixes - check for canonical system, specail check for
alpha-dec-osf to add -std1 to cflags, add check for latex, add check
for BOURNE_SHELL (this is used in hte makefiles, as some os's will use
the users shell, but some constructs we use require bourne type shell), 
add check for number of args gettimeofday uses, change order when
we create the makefiles to be proper.

Use autoconf check above to get correct number of args for gettimeofday.

Fix from  Anthony Thyssen for the editor - should hopefully fix problem with
delete not deleting the correct object.

Remove font displaymode from editor - since we are not distributing any
fonts anymore, doesn't make a lot of sense to support it.

When connection is lost from player, save off the character - prevents
items being dropped on the floor or the players duplicating the items.
However, some additional logic will need to be added to prevent players
from saving their characters in treasure rooms.

Improvements in save_player which should better prevent saves from
happening at inopportune times (like after they have mostly exited).

Add stat_loss_on_death option (yes/no if stat is subtracted when you die.)
Default can be set in config.h, and can also be changed with run
time flags.

Add / behind -I@x_includes@ in crossedit/Makefile.in.  This should prevent
the includes from being reset if there are no x_includes.

Extend draw_look to send multiple item commands - this should only happen
if there are a lot of items on one square.  Fix should prevent crashes/memory
corruption in that case.

------------------------------------------------------------------------------
Changes from Crossfire 0.95.0 to 0.95.1:

Fix server crash if player ran into friendly object.

Strip extra spaces that may be between the command and option (ie,
"use_skill  disarm" would result in " disarm" getting passed to the appropriate
command function.  Some functions could deal with this, others did not,
and it makes sense to strip them out.

Send update to client to remove item from players inventory when it
disintegrates (demon ichors for example).

Change load code so that player handling on unique maps should work better
(I believe there were various strange cases if the player saved on a
per player unique map and that map was or was not in memory, it might not
load the per player unique map)

Removed player file lockin during login.  Extra lock files get left 
laying around in aborted login attempts.  And in retrospect, I don't
think it is ever really needed.

Some excessive/annoying debugging messages removed.

Some general cleanup in some functions that were previous setting
automatic variables.  If the variables are none changing, we now declare
them static, otherwise we don't set the value as the initialization 
area - this prevents warnings with some compilers.  Some casts added for
some functions to also prevent warning messages.

Remove HAVE_SAVE_UID in config.h - no longer any code using it.

In free_player, only call remove_ob on pl->ob if it is not already removed.
This fixes crashes when a player kills there login session before 
it is completed.

Instead of calling draw_look (which causes all data on that space being
sent to the client) each time the space changes, instead mark that we
need to send that change, and have code higher up (top processing loop)
send the data each tick if it needs to be send.  This should result in less
data being sent, and is easier to process.

Add flag_client_sent for debugging purposes - makes it much easier to
trace down cases where server was sending updates without actually having
sent the object yet.  Most all of those cases are fixed with the new draw_look
logic mentioned above.  Add dump_object_from_tag to figure help figure out
the objects generating messages.  dumptag command is available from within
the game if compiled with DEBUG to use this fucntion.

Pup land maps updated to version 1.3.

Fixes in configure script to autodetect X11 libraries better.  Fixes
also in Makefiles so all rules should work and all needed variables should
now be expanded.  Add checks for a few more header files.  Makefile fixes
also include changes so that archive is packed in proper order that it should
not try to rebuild pregenerated files.  Master makefile now set to 
make bzip2 archives in addition to gzip archives.

Added watchdog code from Christian Stieber - periodically sends out UDP
packets so other programs can watch for them and restart the server if it
doesn't see them (hung or down server).

Added ISQRT macro to spell_effect.c - seemed that the code was changed
a while back but that function wasn't added.  It was only needed of
SPELL_FAILURE_EFFECTS is compiled in as an option.

Simplify checking of MAXNAMELEN in crossedite/include/Posix.h

Updated list of options you get when you do -help - removed old options that
are no longer around and added new ones.

Dropping an active container will now result in all the items in the
container being dropped, and not the container itself.  It could be argued
this should be a client issue (client send a move for each item in the
container).  However, dropping everything in the container should be faster
than individually dropping (ie, you turn the container upside down), and
client dropping them one by one would result in that many commands of the
player being used.

Change esrv_move_object to use the pick_up function instead of pick_up_object.
The difference here is that pick_up will look for matching containers, so
players manually picking stuff up in the client will have items go into
active containers as appropriate.  However, this can also cause problems
with smarter clients that really want the object to go into the players
inventory and not a container (I don't think any will have that problem
currently)

Fix in apply for holes - return 0 if we can not move the monster through
the hole - this prevents an infinite loop in move_hole in time.c

Added internal buffering for sockets if the OS's buffers fills up.  This
greatly improves reliability in the client.  Size of buffering is
setable in config.h

Fixed makefile dependancies - make install should now depend on the
actual programs it plans to install.

Fix some bugs in the animation code - most notable is animations with
just 2 facings like the quetcoutal.  Changes to archetypes is to
change the half orc to have 4 facings the quetzalcatl to have 2 facings.

Fixed animations to always use the direction value for determing object
animations.

Change examine code so that if the first thing in an object message field
is @match, don't display the message.

Fix map update code that wasn't calling update_los before sending the
map to the client.

Fix from Timo Kokkonen for socket code - check to see if we got an
interrupted system call (EINTR) on a read/write - if so, loop until it
clears or we get a real error.  Apparantly greatly improved reliability
of the server.

------------------------------------------------------------------------------
Changes from Crossfire 0.94.3 to 0.95.0:

Added diagnostic message if you try to use a skill and it can't find a match

Fix in send item command to better handle objects with a huge number of
items in its inventory.

Shop listing code simplified - send all data to the client at once instead of
havign to store it and wait for the player to hit a keypress.

Fix bug in ghosthit which would cause server to crash (patch for 0.94.3
was released for this bug)

Some general code cleanup - fixing/removing unreachable statements, removing
unused variable.

Build/configuration now done by autoconf (run ./configure).  This cleans up
a lot of special checks throughout the program, and hopefully should be
more portable.

Cleaned up/rearranaged the include/.h files.  Prior, most all structures
where included in structs.h.  Structures and support values now in unique
header files (ie, player structure and support enums and like in player.h,
object structure and support in object.h, etc.).  This doesn't change the
working on the code, but is just easier to maintain.  global.h takes care
of including these is the correct order.

Many options now removed from config.h file.  Options removed either relate
to X11 code/old server support or machine specific details which we can
now pick up via autoconf.

Better speed checking in update_object_speed.

When improving a weapon, client should now get updated (code was updating
the incorrect object)

Improve apply below to be more bug free (that is to say, we preserve
the pointer to the next object - I think there were cases where the
last of an object was applied, and thus removed, but the apply function
did not return a code specifying something was applied, so the code would
then try to apply an object with an invalid pointer)

Fix for collect.pl script to fix problem traversing directories.

(note for 0.95.0, there were many large scale changes, so many of the
entries below are more of just an overview of what changed, and not a highly
detailed account of the changes.)

Fix/improvement in player movers so that players trying to run in the
direction they move don't move incredibly fast.  They will still seem to
move faster (I am guessing roughly player speed + mover speed now).  I am
not sure of the original bug, but my guess is that the mover moves the
player to the next mover (which has a low speed).  But now the player still
has his own action left, and moves to the next mover which has high speed,
so wisks the player to the next mover, which has low speed, so he
effectively moves 3 spaces in one tick when he should just move one.

Changed save player method so that a directory is created for each
player.

Added per player unique maps (new apartments).  Maps from Christian
Stieber, however the implementation is a bit different - if an exit is
marked as unique, it will lead to a unique maps.  The unique maps are 
stored in the new player save file directories as above.

Removed all X11 support from the server code.  Change crossedit so that
it can read in the pixmaps as they are stored in for the client/server
support (so that only 1 copy needs to be kept).  This method of reading them
in is slower than the montage method unfortunately.

Changed socket handling.  Port 13326 has been removed from active service.
Socket information is now part of player structure, which cleans up a lot
of the old code which had to do with find the player that correlates to
a socket and vice versa.

Fix bug so that if invaliad variable is given to dm 'patch' command, program
no longer crashes.

Fix bug so that containers that have a huge number of items don't crash
the server (a container needed to have more than 250 items for this to
happen).  The real problem is containers that allow an infinite amount of
junk to be stored in them (Lepreds bag, but this item/map isn't part of the
standard distribution).  Even with the fix, there still becomes some point
where problems will occur (around 2000 items, the amount of data that
needs to be sent would exceed the size of the output buffer).  In any
case, with that many items in place, the player will see a noticable
performance hit when such containers are opened.

Fix bug that caused the program to crash when attacking ghost or other
creatures with ONE_HIT flag set.

Print out message to player if they have old keybindings.

Some map fixes by Christian Stieber - eliminate ability to bypass
quest and typo fixed in other map.

Fix so that perceive spell (off of rods/staves/scrolls) properly finds
the god of the player.

------------------------------------------------------------------------------
Changes from Crossfire 0.94.2 to 0.94.3:

Fixes to some recipes - before some had non existant ingredients.
As part of this, a treasurelist for ogres added.

archsearch.pl function added to lib/adm.  Useful little perl script that
can do object context searches (ie, immune to X and attacktype of Y)

Old loader code removed - only lex loader supported now (no bugs reported,
so it seems to be OK)

Debugging output improved in various areas to be easier to read/better
inform what is happening.

Hopeful fix in place to prevent player movers causing players to have
-infinite in speed_left.  Fix right now is to just limit speed_left
to -50 - I believe the real problem is that some player moves have
speed=0.0, and it is diving by that value.

Fix so that if a player dimension doors onto a player mover, he no longer
gets stuck in an endless loop - he will now move along the movers as
expected.

When a player dies in NOT_PERMADEATH mode, clear the braced flag.

In the case of spell failure, don't cast mana storm in no magic areas
(instead, just kill the player)

Only write out an updated bookarchive if data has actually changed and needs
to be written out.

Don't print out new client server usage logging if nothing has changed.

Reduced power of 'loose mana' (it appears this only happens when a spell
is failed really badly).  It seemed to me that the area of affect and
damage could be many times deadlier than anything else out there.

Hopeful bug fix for thrown objects getting very fast speed (I am unable
to reliably reproduce this, so am not sure.)  Basically, I believe the
problem was that set_owner was only being set for the wrapper in the
thrown object, but it is the actual internal object that gets used at
some point in the attack sequence.  As such, I believe that the knife,
spear, whatever was getting the exp for the kill (exp = speed in 
weapons).  To hopefully fix this, I have also added a set_owner call
on the real object so when it goes to grant exp, it should find a
valid place for it and credit the player and not the weapon.

Changed spell parsing so 'of' is not needed in some complex
spells (ie, create food or marking rune).  From kfitzner@nexus.v-wave.com

Fixed bug in which you could kill multispace monsters with paralyze or
slow attacktypes.

Added ncom and comc commands to client and server.  These commands allow
client command queing/dropping (note that server will only send a comc if it
gets a ncom first, so old clients should still work just fine).  The
protocol numbers increased to 1021.

Added more objects to the show invisible list - hopefully the pupland
maps should now be fully playable.

RPLAY_SOUND definitions changed to RPLAY_SND - should make for cleaner
compilations for those using that.

Fixed #ifdef for NetBSD in common/time.c to use proper symbol.

Fix so that counterspell should no longer kill monsters with magic
attacktype (ie, jessys and probably others)

Added debugging in deathstrike code to hopefully be able to better track
down face of death problems.  My guess is that it is a problem with level
comparisons.

Fixed/clarified many nexted if/else statements that were ambiguous.  Now
braces are properly in place (From Klaus Elsbernd)

Hopeful bug for disappear objects when emptying bags.  I believe the
problem was that invisible objects ended up showing up in the containers
somehow - this by itself is not a problem.  However, the empty bag
function calls drop with the object to drop and keeps the next value - 
however, drop would forward past the invisible object so the calling functions
next value is no longer accurate.  Drop function now does not skip over
invisible objects in containers (will skip over them in player inventory) -
it instead removes the invisible object since I believe it is garbage
anyways.  I am not sure if this will fix the problem, but there was
certainly some problem in the code here.

Fixed bug with multipart monsters & pits.  Before, they got split into
a few parts like a magician trick.  Now they stay in one piece.  At
current time, the logic probably isn't great, as all that is currently checked
for is the head of monster being on a pit - in reality, probably all the
monster parts need to be on a pit.

-m9 and -mt options added (Code from Raphakl Quinet).  Formulas have
been fixed such that all are now creatable (none missing archetypes).  However,
the output still shows some formulas out of balance in terms of costs.

Changed AT_GHOSTHIT meaning and added ONE_HIT flag.  GHOSTHIT is now treated
like any other attacktype (monster will not be removed just for having
ghosthit).  ONE_HIT flag now means the monster will disappear.  This fixes
the acid sphere deadliness (before, they did have ghosthit as an
attacktype).  All the objects with ghosthit have been updated.  However,
there are probably some other undead which could now have ghosthit added
to their attacktypes since it won't cause them to disappear now.

Updated the programming_guide doc.  Hopefully, it is a bit easier to read
and a little more accurate.

Improved polymorph.  Invisible objects should no longer appear.  Also improved
so that all objects of a type would be possible results (before, it would
be the first 80 weapons would be chosen from, or the first 80 monsters, etc.)
Now it is unlimited.  Smarter initial selection should also result in
a few less meltdowns from it now being able to find an acceptable object.
Also, possible fix that could cause crashes on rare occasion (monster
polymorphed into something else, and when inserted into the map, something
on that space kills it)  Also, we stop processing a space once we hit the
floor - I don't recall floor types ever changing anyways, but there could
be other problems processing subfloor items.

------------------------------------------------------------------------------
Changes from Crossfire 0.94.1 to 0.94.2:

Changed calls to send_query on server side to include the string on what
the query is for.  This is to make clients be able to do smarter/nicer
things when it receives a query.

Bug fix in check_walk_on which would cause crashes when objects are put on
spaces with multiple destructive forces (ie, earthwall cast on top of
a double pool of chaos).  Once check_walk_on finds that the item has
been freed, it stops doing any further processing on it.

Animation code cleaned up.  Animations are now object properties, and not
archetype properties (and thus can be changed in maps).  Also cleaned up so
that the is_turning flag is removed - more complex animations available via
the num_facings.  Below is the section from the TODO file.  Note that there
is still potential to improve animations (many 1 frame animations could take
advantage of the new code to have multi frame (ie, players can now have
images for all directions, and animations for each of those) New code is in
common/anim.c:
  Clean up animation code and make it more general purpose (instead of
  is_animated and is_turning flags, instead add a value that
  states how many animations/direction there are.  For example, right
  now the big dragon has 8 animations and 2 facings (left & right), with
  4 animations/facing.  Something like num_facings could be added so we
  know there is 2 facings.  For arrows, num_facings would be 8, so we
  know that it shouldn't be animated (since there are only 8 images in its
  animation.)  This would make the code a little cleaner, and allow better/
  more complex animations (an object that faces 8 directions could have
  animations for all directions, were as right now, that is not possible.)

collect.pl changed to handle generation of animation file.

Wipe below added to crossedit by Steven Unruh

removed non NEW_HIT_PLAYER in attack.c (ie, old attack code removed)

Added hitback code (looks like it was missing from the NEW_HIT_PLAYER
code)

dm commands will now be accepted from the new client (provided they
have dm priveledges of course)

Add AT_INTERNAL attacktype used only for internal calculations (ie,
does that amount of damage).  Actual damage section of poison now
uses this.

Fix spoiler generation - don't convert monster archetype names to 
lowercase - images generated properly for them now.  Also, fixed problem 
with some images (dragon) being rotated when they shouldn't.

Clear INV_LOCKED flag when stealing objects.

Fixed couple of bugs in throw code.  First, players remaining speed
calculation seemed incorrect.  Second, you can now specify an object
name to throw (ie, throw ring, throw chair).  Third, the client now
gets properly updated with the new/changed item.

Make UNIQUE_ITEMS standard feature.  Removed LOCK_ITEMS as a secondary
feature - running multiple servers against the same set of files is no
longer supported.  Note for compatibility reasons of both methods, it will
look for unique files starting at v00 and will write new ones with the .v00
extensions.  If you have .v01 files, these will be read in the first time
through (provided you also don't have a .v00), but all new files will be
written with the .v00 extension.  Referances to ITEMS_DIR changed to
be UNIQUE_DIR - I think that is more descriptive.  This includes 
the environmental variable.

Change ok_to_put_more to do more complete checking and also not to stop
spells because of a monster with certain immunities being on a space.

If hit_player is called with the 'tail' of a monster, it would previously
just exit if the attacktype included slow or paralyze functions (must
hit the head with those.)  Changed hit_player so we just remove
the slow and paralyze, and still hit with any remaining attacktypes.

change explode_object so it only hits the monster once with the bullet/
meteor.  Previously, it called hit_map, which then hit the player, and
then called hit_player again.  This effectively doubled the amount of damage
caused by the bullet - it now does the correct amount of damage.  As
best as I can tell, meteor/meteor swarm does properly damage the monster
even if the tail was hit.

Bug fix in singing so exp should now be granted the first time singing
is used on a monster.

Changed so that server can be compiled with new client/server support but
without old (port 13326) support.  Various sections of code updated to
work/compile in such a setting.

Fixed premature freeing of map->tmpanme.  Now in delete_map instead.

Added checking in free_object to see if we are called on a non removed
object.  IF many cores is defined, will dump core here.  I believe there
is some section of code calling free_object on a monster without calling
remove_object, which is causing a lot of error/warning messages when it
happens (very infrequently.)  With this test in, it should become quite easy
to track down when it happens.

Added free bsd & net bsd to those systems whose gettimeofday takes 2
arguments (common/time.c)  -lcompat added to libraries needed for
FreeBsd.  Include unistd.h on freebsd.  Don't include malloc.h in
xbmtobdf.c on freebsd.

Sample ban_file added to lib.  Read in of ban_file will now
ignore lines that start with #.  Also, animations file (used for new
animation code) included.

Config file rearranged to hopefully be in better sections and easier
to edit. NEW_IMPROVE_WEAPON and SIMPLE_PARTY_SYSTEMS removed from options -
now always selected. NO_LOG, ONE_PLAYER_PR_UID, CHRFONT removed from
sections - these can never be valid.  NO_ADD added to prevent players
from adding others

Server updated to send full lines of text with query commands to client
so for clients that pop up a dialog box, they can print meaningful data
on what the request is for.

Bug fix so that you can no longer apply multiple objects of the same
type with apply -a

Give better messages when attempting to light something.

New client/server statistic gathering added - will periodically dump
usage stats to the log file.  Server will now longer crash if
client/supposed client sends bad data - will now just close the connection
instead.

Server will not longer crash when player runs into a door.

Can now longer polymorph objects into items that are invisible.

Removed client directory from main archive.  Too many people thought that
was the new client creating confusion, and I don't see a big need to have
it around (it will go away when the X11 code is yanked from the
server anyways0.  If you still like it, the old version of it will work just
fine (no changes have been made to it in a very long time0

Map changes:
  color_ removed from map files.
  library card cost decreased some.
  oldcity maps updated to take full advantage of XPM mode..
  Lake_Country/DA map changed - exp reduced, sp increased.

------------------------------------------------------------------------------
Changes from Crossfire 0.94.0 to 0.94.1:

in artifacts file - moved some settings of difficulty before Object line.
(difficulty after the Object line have no effect)

In low level socket code, retry read/write again if we get a EWOULDBLOCK
in addition to EAGAIN errors.  Some systems return EAGAIN, others EWOULDBLOCK

Fixed possible crash in move_monsters.  I believe the problem was that
the monster got killed by a door, and the function was not expecting
it, and would use the invalid object.  Not sure if the code I put in will
really fix the problem, or just migrate it to a higher level calling
function (have not seen the crash myself)

If on linux, include crypt.h in main.c

Various minor memory leaks fixed.

Better error message for non wiz people trying to use shutdown command.
Shutdown command actually added to command structures and is now usuable.

Internal animations changed from explicit defines to use SET_ANIMATION
macro.  Much easier to read, and better supports client side animations.

Include sounds.h/sound calls no matter what RPLAY is set to.  Only
rplay special code is in sounds.h.  This way, client can still get sound
information without rplay being defined.

removed NPC_PROG code - not used at all - only thing there was a few
#ifdefs setting values.

Moved typedefs for function pointer stuff from structs.h to funcpoint.h.
No outside affect on code, just makes more sense internally.

Disable default selection of DEBUG_DMALLOC on crosssite.def

Removed old/unused charisma bonus values from common/living.c

Minor fix so that a space is properly added between item number and name.

Added a lex loading routine.  Performance seems to be roughly the same,
but ease of maintenace/readability seems better to me.  Modifications to
loader.c should not be done - instead, they should be done to loader.l
Loader directive flags and loader return flags added to loader.l - those
are now used instead of arbitrary integer values.

Fix c_wix.c dm goto command to set the destination object/map name.  Otherwise,
if an invalid map was entered, the enter_exit would try to print a null
string - some systems handle this OK, others will crash.

Changed common/time.c to use GETTIMEOFDAY macro defined once at top
of file instead of having #ifdefs throughout the file.

Fix so that items of differing values will not be merged.  Also, when
merging objects, do not clear startequip flag.

Fix in doc/playbook-html so all include directives are handled properly
with the include_html.pl script.

More details printed about improved weapons (how many improvements done,
max number of improvements.)  Also, skills will show how many improvements
the character can handle.

Bargaining skill will be auto applied when in shops.

Change teleporter code so the teleporter does not have to be the first
or second item on the space - teleporter can be any object on the space.

-a, -u apply options added (always apply/unapply instead of toggling).
Internally, apply and apply_special have been changed to take one more option
which is this flag.

Applied rings will not be merged - instead they will remain seperate.  Fixes
problems with getting full bonuses, and also makes it easier to apply/unapply
one item.

Increased frequency of generation for strange ring (nodrain ring).  This
should make it appear probably roughly as often as the ring of life,
or maybe even more often.

Put maximum carry limit in - beyond the limit, a character can carry no more.
This limit is fairly high right now, but should improve playbalance and
prevent characters from getting a negative weight or carrying so much
stuff it takes forever to move (session appears hung to them)

Added CS_STAT_WEIGHT_LIM to newclient.h, so client can know how much
the player can handle (only used for GUI, so it can do a carry/limit
type of thing)

Title information now used in hiscore displays.

Show invisible spell will now make handles visible.

New server code won't crash if player does nothing when it prompts for the
name.  Also, include necessary dummy functions so server will compile
of ERIC_SERVER is not set.

Will now search keyrings when running into special doors for matching
keys (players can protect keys by putting them in other containers.)

Change jump skill so that any spaces with FLY_ON set will affect
the jumping player.  This prevents the character from jumping over
player movers.

In create_wall - if insertion if the initial wall fails (new all is destroyed),
don't extend the wall.  Fixes the earthwall on top of pool of chaos which
creates strange map problems.

Map fixes:
     Lake_Country/ebony/masterlev altar should now accept fragment
	of chaos.
    Put no magic areas in apartment so it should no longer be able
	to dimension door and get keys.  
    /city/houses/wizz.entry should now be entered at the correct position.
    /city/misc/library - library cards are now identified, so it should
	no longer be able to buy then sell at a profit.
    /city/houses/wizz* maps:  removed ./ from start of some map paths -
	causes apparant problems.
    Lake_Country/Butakis/blacksmith - can no longer get free dragon mails
	or other items - have to pay for them now.
    Remove pup_land/rainbow/Lv4/\nkey (\n was an embedded newline).  Map
	doesn't look to be needed.

Archetype changes:

Added blocksview to gwall so you can no longer see through them.

Fixed up castle animation in bitmap mode (212/312 images needed to be swapped)

Increased exp for skulls from 3500 to 5000, reduced exp of deathtrees from
1400 to 1000.

fixed typo in gauntlets which meant title was set right.

aggressive 1 values changed to unagressive 0 values in some archetypes
(no such value as agressive)

------------------------------------------------------------------------------
Changes from Crossfire 0.93.7 to 0.94.0:

Added outline of future versions in the TODO file.

a mana storm should now hit with godpower attacktype.

The spell create_food will now create food with 0 monetary value, and
be marked as starting equipment, so can not be dropped.

Player titles with spaces should now load properly.

Updated command times for use skill, ready skill, and stay commands so
when client executes them, proper amount of time is subtracted.

drop_object now preserves the freeze inv/look window, which prevents
slowdowns when picking up a lot of objects/dropped.

Added yield to water of diamond, fixed typo for dust of frost recipe.
If a recipe doesn't have a yield, recipe should still be properly
generated.

Hiscore savefile now stores maxgrace and seperates player title from 
player name.

Option added to only swap out maps when MAX_OBJECTS is exceeded 
(MAX_OBJECTS_LWM)

Changed internal definition from SOUND_EFFECTS to RPLAY_SOUND to properly
reflect what it actually enables (sounds for the client are always
enabled)

No longer put a 'a' for single objects.

Changed ring generation so rings of power can be generated.

Change can_merge so that more objects are mergable, add nrof 1 to some
objects.

Improved set_owner which can fix getting into endless loops.

Change insert_ob_in_map_simple so it doesn't call check_walk_on.  fixes
player being slowed way down when dropping objects on slow move space.

Animations moved out of archetype and into seperate array.  This is necessary
for the client as it makes a unique referance number for each animations.
Also, in future, this would make it easier to be able to change aminations
in objects/maps.

Print out level gain messages in red so they are more noticable.

Change can_pick so that invisible objects can not be picked up.

Change singing so you can calm a monster multiple times - you only get
exp once however.

Change show invisible so it only makes monsters and players visible, and not
things like magic mouths and ears.

Patch so that if peaceful is set, you will not attack other players even
if they have attacked you.

Auto apply woodsman/mountaineering benefit when in the appropriate terrain.

Fix get command so it takes from a container if appropriate.

shutdown and kick wizard commands added.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Client/Server changes for 0.94.0

Updated protocol version to 1010

Server debugging statements in ericserver can be enabled/disabled by 
define at top.

Client can lock/unlock items on the server.

Client can now look at spaces now.

Send update of item to client when it is identified.

Send update command to client from decrease_ob_nr to update players
overall weight.

Now send animation information to the client.

Now send sound information to the client, client can send setsound
to server to enable/disable sounds.

Client side image caching fully supported.

Added updates when picking up objects/dropping objects so that players
weight and container weight is updated if necessary.  Also, if object merges,
make sure we then send a delete of the original object that is now gone
to the client.

Update object changed to send floor animations to the client.

Send update when power crystal changes speed.

Send update of player object after player is loaded.

Change server so that only send map update and player stats once a tick -
should be more efficient and equally sufficient.

Added LOCKED flag to item transmission command so client can no which items
are locked.

Added item1 command which superceded item command - sends more informatin.

Added update command to protocol, and function in server - only sends 
portions of an object that need to be updated.

Server now properly handles repeat fire on.

------------------------------------------------------------------------------
Changes from Crossfire 0.93.6 to 0.93.7:

set_god wiz command added.

Changed call to 'index' to 'strchr' in commands.c - keeps with what
the rest of the program does.

Pupland archetypes and maps added (v1.2 of pupland distribution).

Changed get_random_mon to be more random when a monster of a specific level
is requested.

Casting transferrance spell on another playing and having their head explode
will no longet get the recipient of the spell exp - instead, the caster
of the spell will get the exp for any kills.

change put_a_monster function so it properly handles multi-square monsters
(put_a_monster is called by summon_evil_monsters, at probably others)

Changed alchemy so you no longer get exp for failed/random mixtures

If a container on the ground that the player is using (ie opened) is 
somehow removed, update the players view to now be the ground and not
the container.

Player titles will now be loaded properly from save files.

Can no longer sing and make the same monster unagressive multiple times.
The implementation is actually borrowing the NO_STEAL flag, which means
you can't steal after you sing, and after a failed steal, you can't sing
and calm it down.  Also, make sure that only the 'head' of a monster is
sung to.

Fixed up CSword_116 xpm file (too many chars on one line)

Added note/option in config.h for systems lacking O_NDELAY.

Fixed up some of the quests in Lake Country - can no longer just run and
get the dragonbane or buy the armor with a lot of scales.

New Client/Server changes:

    changed esrv_send_face to take the client_num instead of client_id
    (should be slightly more efficient).  This does not affect the protocol
    in any way - it just makes the handling on the serverside more efficient.

    Changed item command to calculate objects total weight before sending
    it to the client (total weight = weight+carrying).  This is needed because
    there are many times that the client does not know what is in the container
    and thus can not properly calculate the weight.

    Change server so it sends updates for the parent
    items that the object is being moved from/to (ie, when removing something
    from a sack, send an update for the sacks weight).  For the client
    to properly handle the player being re-updated, some special handling
    had to be added so the inventory list would be updated and so that
    we don't try and add another player object (client search routine for
    tags didn't look at the player)

    Fixed server so it now properly updates the original item from which a
    portion of it is being dropped.

    Fixed bug in server handling which kept the -1 return code from a
    blocked socket and decreased amount to send by that - reset to zero
    so amount to be sent remains the same.

    askface and mapredraw commands added to Protocol by Phil.

    Changed load player function so it calls fix_player before sending
    initial data to client.

    Removed some printf/debug statements from pickup code for newcs in
    player.c
------------------------------------------------------------------------------

Changes from Crossfire 0.93.5 to 0.93.6:

If we fail to save a map, all objects on that map should now be properly
deleted from memory.

Fix possible crash when score is being generated if player is on
swapped out map.

Default output buffer for new clients is now 64k.

Partial code in place for client side image caching.

Alchemy changes from Peter & Brian.  Main change is that multiple recipes
can be made at once.

Bad grammer in messages printed out when readable object is beyond players
comprehension.

ethreality recipe commented out in formulae file.

Some playbalance issues on maps fixed by Samuli Tursas.

Internal handling of shop menus changed - instead of a list of objects,
change it to an array of strings.

Minor changes in porting.c to hopefully make that file compile properly on
more systems.

doc/experience updated with some more notes from Brian.

CAN_MERGE changed from a macro in define.h to an inline function in
object.c (only file it is used.).  It makes it a bit clearer, and hopefully
a little safer.  There is an option at the top of config.h for handling
of the INLINE function declaration.

Possible fix so that altars should not be re-concecrated if god is
set in the editor.

Undead monsters can now see in the dark.

Fixed bug in parse_command which would cause crashes if a socket connection
entered a string with a ; in it.

Increased string size in new_draw_info which prevents crashes/stack
corruption when really ling strings from a socket is entered.

Changed spell level/costs between invisibility and improved invis such so that
the improved version is now a higher level and more sp.

Now possible to steal from a creature more than once as long as character
remains unseen.  Each steal attempt will become harder in any case.

Remove some special player checking in get_nearest_player - I think it
caused some crashes, and wasn't necessary (in fact, clever players could use
it to get it such that monsters would not target them.)

When characters stop levitating, call check_walk_on so they will fall
through pits or other applicable effects.

Fixed up some archetypes which could be picked up when that should be
set (trapdoor, bullet, meteor).  The last 2 cases can not be picked up,
but clever casting of alchemy could have nuetralized them.  collect.pl will
now print warning if an object has walk_on set but does not have no_pick set.

Added new map from Bjoern Helfesrieder to starting town (Yarin's House)

Fix in item matching code that could cause core dumps.

Fixed clearinfo command so that it still works even if player is using
scroll mode (only if player issues the clearinfo command - other uses
of clearinfo in function won't clear in scroll mode.)

Improved shop listings so they are sorted by type, then sorted by name.

Fixed bug in backspacing the to the front of the first line of an
extended command - it now works properly and puts you back in normal
command mode (this got broken in the addition of extended line input.)

Player should still be able to save if they were the wizard.  However,
wizard status will be stripped for save, but the fact they were a wizard
will not be stripped.

Imp made even wimpier by Peter M.

If you set of traps, open doors, push a player, or roll a boulder,
you now become visible.

Change it so that when something/someone reads a scroll, only inform
the other people on the map (perhaps this is still overkill?)

------------------------------------------------------------------------------
Changes from Crossfire 0.93.4 to 0.93.5:

Replaced handbook make_index script with perl version.  Much faster, and
also fixes problem with echo command doing different things on different
systems.

Minor change in crossedit such that if it is not compiled with XPM
support, it will give an error message if run with the -xpm option.

Changed code so that experience objects no longer change stats (reverses
'fix' made in 0.92.9)  Fixes problem of characters getting extra
stat points from the experience objcts.

Fix bug that could cause infinite recursion loop in spellpath_msg.  From
cameron@ripper.stl.dec.com (James Cameron)

Fix bug in complex keybindings in which all the commands in the keybinding
were executed that tick.  Thus, if you bound a key to north;north;north;north
and pressed that key, you would move 4 spaces north no matter what your speed
was.  It now works properly, and you move at proper speed (keybinding is
copied into buffer in player structure, and removed as we go along.)  Note:
This buffer could also be used to hold keypresses not yet processed, but
that hasn't been done yet.

Added ability to enter lines longer than the info window is wide.  This
allows for longer keybindings or say commands.  It isn't the most
sophisitcated thing (the extra lines show up with a 1> and 2>, etc for the
extra lines, and we just redraw the previous line if you backspace that
far.  After you complete the command, it does end up redrawing the entire
command, which can take a few lines, which gives some confirmation on what
you typed in.  This feature was added to both the standard server code
and the new client.

Change use of tempnam to tempnam_local which we supply.  Standard tempnam
will look at the TMPDIR environmental variable, and use that to override any
other value for the directory - this causes problems if different people
runn the program and using the temporary maps accross runs. tempnam_local
will not look at the TMPDIR variable, and will instead always use the value
we pass it.  This can be changed if we were not compiled in SECURE mode by
changing the CROSSFIRE_TMPDIR environmental variable.  Code was also changed
so the CROSSFIRE_TMPDIR variable will not be used if compiled in SECURE mode.

Fix so that you can no longer move really fast or fire really fast by using
the mouse buttons in the game window.  Using the mouse buttons in the game
window should now result in the same speed as using the keyboard.

Patches from Peter Mardahl:

    Dusts now cast as ability and not spells.  This mean that they will not
    have magic as part of the attacktype.

    Spells that are cast on oneself now ignore direction.  Thus, healing and
    protection potions can not be cast on something next to the player using
    the object.

    Detector object added.  Similar to inventory checkers, but only
    periodically samples what is in the space, and doesn't look at the
    inventory, only objects actually on the map.

    Creators can now cause objects they create to inherit names.  They can
    also periodically create items.

    Arch diffs: imps weakened, cold dragon spews forth cold, creator modified
    to have default speed 0.

    New FireTemple set of maps.  These have been onto the Volcano in the
    southeast area of the continent.  The maps that were there were moved to
    world_e2, under the crater.

    Gradual light/darkness code put in place.  I fixed a few of the bugs
    that were in peters orignal version, so it works flawlessly for both
    server and new client.

------------------------------------------------------------------------------
Changes from Crossfire 0.93.3 to 0.93.4:

Inventory checkers can now act as doors.  If no_pass is set in an
inventory checker, player can not move onto that space unless they meet
the match requirements.

Signs that are usuable only a fixed number of times added.

Fix for pedestals & buttons so they are only activated once when a player
moves onto a space (previously, they were being activated twice.)

Fix for connected objects so that they will not be sacrificed on altars.
This fixes a case where you might want to put a check_inv and altar with
the same sacrifice on the same space.  Before, the inventory checker would
be sacrificed on the altar, causing the linked button list for 
inventory checker to be corrupt.

Many maps updated to look better in xpm mode or just better in general.

Change in crossedit so that if you set the randomitems variable for an object,
it only sets the value at the head of the object, and not all parts of the
object (it would be nice to allow non head parts to have this set, but I am
not sure how to get what part was clicked on in the editor, since it seems the
head is passed to the function.).

xpmtopix.pl script added.  Eventually, I hope this will replace the
C version.  For now, all it is good for is to verify that the XPM images
are using the proper colors.  Numerous XPM images were not using the proper
colors (a lot were using brown, which is not an official color - see
the xpm template for what is.)

Cleanup of proto directive to turn __signed into signed.  Also, change
#if __STDC__ to #ifdef __STDC__ in proto files.

Fix so it should now compile if SECURE is defined.

Ability to more easily added needed libraries in crosssite.def -
Extra_Libraries option added.

Assume Linux has a prototype for tempnam (at least my version does.)

Many objects added, and many XPM images updated/improved.

Change in new CS code - don't send the version string until after we fully
set up the structure.

Change so crossfire will compile if SAVE_HOMEDIR is set.

Reverse actions of -m8 and -m9 (Believe they were doing the wrong thing
relative to the scripts and what the docs say.)

Change in hiding code and detection by monsters.

------------------------------------------------------------------------------
Changes from Crossfire 0.93.2 to 0.93.3:

Added a fill below function in crossedit.  This make filling in backgrounds
for maps much easier.  Basically, it just puts whatever object you select as
the bottom object of the bounding box.  If the bottom object on the map
matches the object being inserted, the object is not inserted.  As a side
effect of some code in GetMapObjectZ, if it matches the top object, it won't
be inserted either.  This makes things much easier to update map backgrounds
for XPM mode.

Hiding made easier for players.

Stealing is made easier for players, but harder beyond the first item.

Many image colored and perspective corrected David Sundqvist.  Also, several
new objects added (specialized altars, some more indoor furniture/more
orientations, some sliding secret doors, and new wall types.)  Barn image
naming conventioned changed to follow what is considered proper.

A few maps added by David (two temples in starting village, along with
a mercenary recruitment building.)  Also, some maps fixed to look better
in XPM made.

Party kill option added by Rauli Ruohonen.  IT lets you see who has killed
what recently in your party.

Saving throw for objects cleaned up.  Previously, an objects immunities/
protections were not being used correctly to determine if it made its saving
throw (that is why icecubes could be destroyed by ice).  It is now set up
properly.

Gods will no longer improve weapons that have been enchanted by other gods
(Or I believe by yourself.)

Fix memory overrun (1 entry) when initializing values for the images.

Program will not recover properly when it attempts to load a temporary
map.  This means that load_temporary_map returns the map object to use,
since it might change.

When setting the owner of a monster, clear its ability to use skills

Fix in decrease_ob_nr so it should now work on 64 bit systems.

Mapguide updated with various suggestions made on the mailing list.

Linux systems assumed to have at least random available (change in the config.h
file.)

't' is now bound by default to 'ready_skill throw'

missing demon types (imp, big_demon, Greater_Demon) added to the list
of demon races.

xpmtopix will print a warning if it detects and XPM file using a tab character
in the color name - makes it easier to track possible image corruption.

Check for power of improved weapons now in its own function.  Also, we
now properly check weapon power when improving one (before, you could
improve it one level more than you could actually use.)

When a container is applied, make sure it is a player applying it before
checking for new client/server information - otherwise an invalid pointer
is dereference.

Complex keybindings added - thus, you can bind several commands seperated
with semicolons to one key.

Fix in encounter.c so if compiled with RANDOM_ENCOUNTERS, the new
settings structure is used for map location.

Added check fot out_of_map in various places that needed them - prevents
some more core dumps.

skill identifications will now look on objects on ground in addition to
those in the inventory.

perceive self should now tell you what god you worship.

map reset times on maps (temporary maps accross multiple runs) will not be
altered if there is no map reset time.

------------------------------------------------------------------------------
Changes from Crossfire 0.93.1 to 0.93.2:

New argument parsing routine - we now parse arguments in phases.  With this,
I have moved many of the global settings into a settings structure, and 
allowed highscores to be displayed by class/name.  The man page and -h
option have also been updated.  Also, all the files that could
previously be specified via environmental variables can now be specified
with command line options.

The temporary directory can now be specified via -tmpdir command line option or
CROSSFIRE_TMPDIR environmental variable.

If you cast word of recall and then save before it takes effect, it will
no longer corrupt the character (and will in fact take effect when you
restart).

Don't let players throw starting equipment.  At the same time, don't mark
throwable items as starting equipment - instead, just give it zero
value.

Fixed inscription - now properly writes scroll when passed no string instead
of crashing.

Artifact monsters now possible (monsters whose abilities are changed based
on the artifacts file.)  Top of the artifacts file has more information on 
this.  For now, I have only set up the orc, ogre, and goblin to get
special leaders.

Temp maps can be reused across multiple runs.  See config.h for more
notes.

Bug fix in inscription:  If you inscribed a scroll and already had
one like it in your inventory, the game would crash after they
merged.  Also, if you failed in inscribe a scroll, the game would
also crash (object it was using to calculate experience had never been
initialized).  For now, I just changed it to return -10*spell level
as the exp award.

Items will now be merged with other items even if one has been inventory
locked.  This way, if you have some torches that are locked and you pick up
some more, they will merge in instead of showing up seperately.

Bug fix for saving throw on objects hit by cold.  There could be cases
where an object being processed is no longer on the map and would cause
a crash.

Change find_first_free_space to return -1 if there are no free spaces.
Calling function should check this and then do the 'right thing'.  This
fixes problems with runes creating monsters on top of monsters (or
below the player).

Magic map cleanup.  Now have magicmap field in NewFace structure.  This
field holds the color to use for magic map in low 4 bits, and various
flags in high 4 (right now, only floor bit is used, since drawing may
differ on bw systems with that value.)  magicmap filed is now supported
in .arc and faces file.  collect.pl modified to automaticaly put
magicmap into the faces file, will also copy is_floor into faces file.
magicmap takes a color name.  This seperation allows magic map colors
to be set independant of foreground and background colors, and simplifies
the code a good deal.  Also, it makes new client magic map support easier.
Now all the archetypes need to be updated (I have already done the armour,
connect and construct directories.)

Magic map for client now implemented.  Definition of protocol added to
Protocol file.  Only limitation implementation has over direct server is
it only flashes the position of the player who cast the spell.  This
seems perfectly reasonable to me (use color or other attribute to know
where other players are.)

Old client (telnet front end) changed so that it no longer requires
libcross.a.

save object should do a better job if it gets an object without an
archetype.

buffer size for LOG increased - there were cases where this buffer
was not large enough and was causing crashes (sending large amounts of
garbage data to the socket was one way.)

Load map will now reload the original map if the temporary map is for some
reason no longer around.

Fix bug where randomitems may not have been properly initialized for now
objects (was inside an #ifdef for CASTING_TIME)

strerror_local added to porting.c.  Lets up give up more reasonable
error descriptions for certain errors.

If an object is cursed, set its vulnerable values to its protected and
immune fields, adn clear those fields.  Fixes 'problems' with finding
cursed rings which are not really cursed (pro fire/vuln cold rings.)

If trying to switch to private colormap in XPM mode, check to see if 
we are successful.

Fix crossedit so that if you have a map loaded and you then try to load
an invalid file, it no longer crashes (now reverts back to old file)

Archetype changes: Golden unicorn horn now has its own set of images.
Editable field updated for the gods archetypes (they were showing up in all
the menus.)  living_chaos object added (need for Brian Thomas's maps.)

Update the editor/picks map so that all archetypes are included in at least
one of the maps.  Modified the map_info script to print out unused
archetype.

New server:  Only increase buffer size of socket if it would increase
overall size.

fix in skill experience calculation to use magic field properly.

Alchemy spell changed.  If there is a cauldron in area of effect, only
do cauldron alchemy.  Otherwise, do item to gold nugget conversion.

Added a few more notes/thoughts to the mapguide/

------------------------------------------------------------------------------
Changes from Crossfire 0.93.0 to 0.93.1:

change race initialization functions to to fix cases where race is specified
in race file but no race is specified in the arch it points to - before it
would not be added to the proper race list.

include handbook.ps in the standard distribution.

Client server rewritten to no longer use eutl package.  Other bugfixes for
client server: server now properly sends delete item command to client,
client now properly adds up a containers (and hence players) weight, pixmaps
are now supported.

Snowball spells added - these are the same idea as the fireball spells. (by
peterm)

Magic wall will consume several squares now.

spells array (in spellist.h) updated - was missing a spell (cure blindness).

splitter.pl (by peterm) added to arch/dev directory - takes a larger xpm
file and splits it into 24x24 chunks.

icestorm and small snowball added to possible list of starting spells.

Only set minimum speed of 0.01 for players.  This fixes the bug introduced
in 0.93.0 where multisquare monsters moved too slow.

Only print out a creature lost a spell if it is in fact a player.  Only
applies for casting time.

fix_me command added - basically just calls the fixme function.  Can be
useful if you that your characters weight is for some reason incorrect.

Fixed sprintf that was copying over static character data if you tried to
form a party that already matched a name.  Also, fixed a possible buffer
overrun situation.

More memory leaks fixed by Rupert Goldie - also fix to prevent orated monsters
from attack themselves.

New xpm images for woods and some buildings by David Sundqvist.  The new
buildings have a bit more texture and 3-d look, the new woods look a little
bit more in scale and mesh together better.  The old images are in the
xpm_pref directory if you prefer those.

More code added to free memory when server shuts down (useful for
trying to track down some memory leaks).

------------------------------------------------------------------------------
Changes from Crossfire 0.92.9 to 0.93.0:

Minor map changes:  Some maps cleaned up to look better in XPM mode.
Removed no magic areas from around the demilichs in lord ramsdre mansion.

map_expand perl script added (located in lib/adm)

Cleaned up use of externs and declarations of many structures.  Depending
on the linker, these would not be merged into one value, and thus not be
initialized/set properly (fixes 'mark pushed you bug').  This was a problem
at least on SGI systems, probably others.

If on a sun and not using sun's acc, assuming Stupid Sun Headers, even
if on a Solaris system.

Changed change_abil so it returns true if a value actually changed (useful
for printint out information when apply objects like potions.)  A lot of
return checking of this function in apply.c is removed - that checking
now seems obsolete.

Set visibility to zero at first stage initialization.

Put a lower limit of 0.01 for player speed.  This still gives an action
every 12 seconds if you pick up way too much junk.

When praying at altars, have gods grant out spells only if it is a spell
they are attuned to.

Cleaned up some memory leaks, courtesy of Rupert G. Goldie.

Cleaned up the cast command code.  Also, if you do something like 'cast p', it
will now show all spells you know that start with p, instead of casting the
first one it finds.

Shift middle button in the inventory window should now mark an item.

Fix button handling for look and message window so that only if it is clicked
with the right 30 pixels do we consider it a scrollbar event (before, anything
more than 270 from the left was considered scrollbar - works fine for
default sizes, but if you resize, it would cause problems.

If on SGI systems, don't default to using rand - it should now pick up
lrand48 or random instead.

Change spell casting such that if you aren't high enough level, it more
obviously states it (previously it said you 'lack the skill', which can lead
to confusion.)

Fix so that the first recipe is now accessible when performing alchemies.

Added many thoughts/ideas to the TODO list.

Increase buffer size for examine command - some object could overflow the old
buffer.

remove no_magic from all monsters - immunity values should be used instead.
am not sure 

Made changes for strcasecmp detect - was checking as defined(sun), now is
defined(__sun__) - this is proper and what the rest of the code uses.

define MAXNAMLEN in crossedit/Posix.h - needed for ultrix systems.

Made it so that boots are not always considered magical (since there are
now many plain boots out there.)  Also, removed the always_magical function -
is_magical should now handle it all.

Allow items of type BOOK to be identified, since you can now find non
identified readable items.

Change loot_object so it doesn't remove experience objects - this way skills
don't get removed when a player dies.

------------------------------------------------------------------------------
Changes from Crossfire 0.92.8 to 0.92.9:

Make sure all skills are unapplied when changing the class.

When generating a spell listing (cast with no options), display the
level of the spell (or den if it is denied.)  Also, display mage spells
in one batch, priest spels in another group - I think this is more
relevant now since these are seperate exp objects and draw on different
power sources.  Still no pause key (doing those is a real pain) - that
is really a client issue or we should just add a scrollbar to the text
window.

Removed level 20 from artifact 'sword of Beserkgang' - was preventing
characters from using it.

Put cause many wounds spell in PATH_WOUNDING.  Book chance for holy word
increased.

Let experience objects change stats.

Many debugging messages added or updated to print out more useful/
detailed information.

Changed usage and set_protocol function names in client/client.c.  This
prevents name collision with libcross.

Web site locations added to the README file.

Load and save window positions even if split windows is not set.  This way,
window posititions are lost if you run the game in non split mode (and I
don't see any reason to discard these values.)  Also, -split can
be used in addition to -w to get split mode.

Changed check inventory objects to recursively search through containers,
and cleaned up the code.  Also, added notes on crossfire.doc on using it,
and made basic archetype to use.  When using inventory checkers in
crossedit, have the attributes by default come up with connected and
lockcode fields.

Made change to unique items:  If the object is a floor and has unique items
set, then all objects above and including the floor get saved as unique
objects.  Also, when merging maps and freeing old unique items, make sure we
remove them from the button links.  Made an apartment map which characters can
buy permanent apartments and also store equipment in.  When exiting the
program, save off all maps so the unique items get written out.

Xpm fixes:  Moved floor setting from map loader to update_object.  This
makes it so that crossedit will display the map properly in XPM mode as
you make updates.  Also, made default visiblity 0 - this makes the double
floor work properly.  There still seems to be some bug when pasting objects
in the editor with respect to updates.

Change made to goths taverns and tavern in lake country.  Change is so
that some of the wimpier informants don't have really good stuff to take.

Periodically write out the book archive during play, and not just when the
program exits.

Bug fix so 'drop x items' should no longer crash.  Also, 'drop 1 item'
should now only drop 1 item of 'item', and not all of 'item'.

Bug fix so 'unlock item' should now work OK.

When throwing objects, clear the APPLIED flag before the throw.

Prayer granting from praying at altars changed around - you will get more
unusual prayers, and a Wisdom of 25 is not a yes/no cutoff - value of
sucess depends on wisdom.

Archetype changes:  remove no_magic flag from demon lord - I don't think
this should be set in any monster - instead, immune should be set properly.
Added damned flag to gates that are no magic (probably not necessary,
but I think it makes sense.)  Added check_inv object.  Removed some
duplicate skill types (same skill, different arch names.)

Have get_pointed_target return the head of the monster if it is a multi
part monster.

Change smite and finger of death spell so they have no effect if creature
reflects spells.

Fix to prevent bug crashes with magic rune spell.

Fix in spring_trap to correctly target the victim.  Also,
fix in find_traps which prevented the gaining of experience.

If character has bonus grace, display it with percieve self.  Also, load
and store the last_grace value properly.

Changes from Brians hide/attack patch:  Adjustments for attacking based
on varying factors, monsters wake up & call for help if it, can't remain
hidden if you attack, changes for monster detection of hidden/dark/invisible
players, players no longer remain invisible if attacking, adjustment in
exp for stealing, stealing and hiding chances changed based on terrain
and other modifiers, when generating flesh items, set no_steal, give 
chinese dragons some treasure, giants a little more gold.

------------------------------------------------------------------------------
Changes from Crossfire 0.92.7 to 0.92.8:

races file changed, a bit more flexible.

Additional dump flag (-m8) to dump god information.

If attacktype is holyword, creature must be in slaying field of holyword.

Better handling for items that remove/add protections,immunities,
vulnerabilities. Only print changes if there is an actual change.

holy power, blinding attacktypes added.

Add poison to list of items that might not be identified.

Two when windows are killed:  1) data is freed properly without causing
crash now.  2) If player has saved but window is still active, will
no longer make a save of the player.  This save would be a no-item save
that the character had been playing.

Bug fix to prevent crashes if clicking a button in the message window
and show_Buttons not enabled.  Also, moved button handling in message
window into its own function.

Bug fix for pet monsters that should prevent cores if cycling through many
maps very quickly.

appendix for god information added to handbook (both latex and html versions.)

gods2 patch applied from Brian Thomas.  The main thrust of the patch is
to make gods objects/archetype, and not array entries in the source code.  A
lot of code needed to be changed to support this difference.

God patches so that game doesn't crash if no gods are set.

Hopeful change for FreeBSD so it automatically pulls in the crypt
library.

Can no longer cast spells which are beyond your skill level.

More powerful spell failures added.

Can no longer read scrolls/other readable if blind.

Fix bug that if a weapon had slaying, it slayed all monsters, not just
the ones it was supposed to.

Don't add the bows attacktype in when figuring out the attacktype of this
player.  This pretty much always gave the character a physical attacktype
in addition to everything else.

Fix 'peaceful' when using buttons so it doesn't crash the game.

path_to_player changed to work better on diagonals.

Spell choosing by monsters a bit more intelligent.

No longer get experience for disarming/finding your own traps or those
of other players.

Add NO_STEAL flag, with obvious meaning.  If a monster notices you stealing
stuff, all his items are set to this, so nothing more can be stolen.  Flag
is automatically cleared when items are dropped.

Add run and fire messages to message (stat bar) window.

Make USE_BUTTONS playable setable item instead of compile time item.

Don't insert heavy (>5 kg) missile objects into player when they hit - have
them drop to the ground instead.

--
Made more general object matching routines.  item_matched_string sees if
an object matches a string (which can be comma seperated list of many
things.)  find_best_object_match finds the best match in the players
inventory.

item_matched_string gets used for for matching multiple items.  It is
used in drop, get, take, lock/unlock

find_best_object_match is used for apply, examine, mark, search-items.

Also changed code so that certain actions are in sync with what display
mode is set (mostly drop.)
--

If levitating, you can now remove items from containers in your inventory
(after all, they are levitation with you.)

Clear is_changing flag if object is being thrown.

Changes made to inscription code to work better.

Changes mode to experience awarding for player skills.

Fixes made to Peter Mardahl's dragonquest maps.

Big Wizard, Belzebub, and Demon lord xpm versions colored.

Minor bug fix to container in Thomas map.

Some new archetypes/images for peterm/dragonquest maps.

Make food creation spell more dynamic - food names/values no longer hard
coded in.

Additional demons added by Peter Mardahl

Bug fix to prevent crashes with improve armor/weapon scrolls.

Bug fix to prevent crossedit from crashing when exiting with edit windows
open.

Fix to prevent monsters from throwing certain good objects.

Make sure praying over an altar only gets cleric spells.

Increase saving throw array to correspond with max level.

Monster hp/sp regeneration method changed some - more accurately tunable
for low regeneration values.
------------------------------------------------------------------------------
Changes from Crossfire 0.92.6 to 0.92.7:

Monsters now tend to be more agressive about firing spells.  Several
changes - now monsters will fire along diagonals.  For multisquare monsters,
we check to see if any part of the monster has a good shot at the player,
not just the head.  This changes tend to make it more likely that a monster
will cast a spell and hit other monsters (makes a pack of wyverns more
dangerous, as many will cast spells at you.)  I am not sure if this is a bad
thing - all it means is that you can't mix fire using creatures with
monsters that will be damaged by fire.

Let archetypes in the races file have spaces (for Arch Angel)

Throwing code added - players and monsters can now throw objects.  Some
new throwable archetypes added.  You need to add throwing_skill to any
old players - you can run the utils/add_throw.perl <playerfile> to do this

crossedit:  If a object have editable of 0, make it so it doesn't appear in
any of the menus.

Max yield added to recipes.

Better checks for insert_ob_in_ob to make sure we really have a player
before calling some of the update functions.

Weight limit for custom containers is now saved.

If we load an object and find it has no archetype, just drop the object.
This shouldn't happen, but can prevent core dumps for maps with missing
objects or players from a different version.

Add 5 static buffers to query_name - it is now safe to call it a few times
in a sprintf or the like without losing the old value.

Added 'statistics' command.  Shows useful information about the
character (none that can't be found in the docs.)  Also changed
'skills' to show how much exp you need in each category for the next
level.

change_abil changed so that it only prints out what values/attributes
have changed.  Ie, if you remove a ring that gives protection from
fire, but have other fire resistance, it won't say you are more vulnerable
to file (since you are not.)

Charisma bonus/mechanism changed (again.)  Values in living.c are more
easily/directly translated into what it means for buy/sell cost.  Curve
also balanced out some more.  Query_cost changed so the value
mechanism is a bit different (unfortunately, we need to multiply the value
of objects by 4 to keep them roughly the same price as before.)

Added 'mark' command.  You use this to mark objects that are used for
other objects (ie, torches with flint & steel, weapon with improvement
scroll, etc.)  This removes the necessity that the item you want to apply
be the first thing in your inventory (in fact, that is no longer supported.)
This should also make things easier for the client.

Bug fix that prevents crashes on spaces which have a teleporter and sacrifice
altar on the same space (/Lake_Country/DA).

Some minor changes to lighting code, some maps also updated to
use lighting code.

Added halfling and half orc character to the game (From Brian Thomas)

Changed valuation for FLESH items.  Before it was value*level of creature.
Now it is value*sqrt(level*2).   For low level, this keeps roughly the same
value, but for high levels, it keeps things more reasonable (drops the
value of zombie corpses to about half previous value)

Bug fix for monsters that have attacktype of ghosthit along with
others (main fix ghasts, for Lake County, REtower/tower3, but
this could happen for any monster.)

Fix for attacks doing no damage against monsters they should.

Bug fixes to readable code - should no longer core dump (At times) when
books are created, should also be more robust and fix some other bugs.  Also,
give more detailed messages on how many levels beyond your comprehension
a book is.

randomitems now stored in object, not archetype.  This means that treasure
types can be changed in the map - a new archetype doesn't need to be added.
However, the treasure to set must still be in the treasures file (or you
can use none so treasure is not generated.)

Removed color_fg and color_bg variables from game - these have long been
obsoleted, but code to handle them has never been completely removed.

Changed code so that best wc possible is +/-120 - should now prevent
overflows.

------------------------------------------------------------------------------
Changes from Crossfire 0.92.5 to 0.92.6:

If player deletes window and we can't save, delete player objects instead of 
dumping them on the map.

Make NEW_PROCESS_EVENTS standard - remove old proces code and ifdefs.

Remove temporary object from cast_spell - pass along both spellcasting
and owner objects.  Seems to fix some bugs and increase reliability (also
is a better way to deal with it.)

Change made so that converters are also knowledge about 'money' psuedotype.

change spellcasting altars so they also push the button.  Fixes altars
on some old maps.

Some minor tweaks made to the artifact file - mostly clarification of names
or setting values correctly.

spellcasting skill renamed to wizardry.

Fix made so that 'old' potions (strength, int, etc) use correct price.

If you examine food/flesh items, you now get detailed information (food
value, protections, etc.)

Code by brian thomas so that book titles will remain constant across
different program runs.

Bug fix for crashes caused by multisquare monsters stepping on
deadly objects.  Basically, fully insert the object, then start doing the
check_walkon's one at a time to see if the creature dies.

Brian Thomas' valley of the sisters quest added.  Additional archetypes
and treasures added to handle this.

'sort_inventory' option added (player setable.)  IF set, when items are
picked up, they will be inserted by type, then alphabetical.  Very handy
for scrolls and rings.

Some fixes made to the kundi maps.

Flesh/alchemy fixes by Brian Thomas.  Flesh type now inherit properties
from parent creature (weight, and possibly protections/vulnerabilities are
added).

Change made for alchemy - you can't toss a bunch of junk in a cauldron and
get a good item out unless you sucessfully use alchemy.

handbook added to the doc directory (tex/postscript.)  And html version is
also there, along with an html version to the spoiler.  Tex version of
spoiler also fixed so it is generated properly with new Latex.


------------------------------------------------------------------------------
Changes from Crossfire 0.92.4 to 0.92.5:

Som bug fixes made dealing with cursed improvement potions.

Always let players learn spells if they are in their starting spellbook.

New attack methodology put in palce.  To put in simply, if there is
only 1 attacktype, things remain the same.  If there are multiple attacktypes,
we cycle through them one by one, and take the one that does the best
damage and use it.  Some attacktypes no longer do damage - they are effects
(ie, paralyzation, slow.)  In the case of of these, the effect will always
be applied if appropriate.  Code looks to behave pretty much the same,
but is easier to follow.  IF new code is buggy, or you don't want it, 
there is a define at the top of attack.c you can change.

If god blesses you, lets actually remove the depletion object from the
player inventory.

Other god related fixes put in place - look to also deal with blessed
weapons.

Additional dump flag added.

fix bugs with USE_BUTTONS and the peaceful button.

Only allow write_rune to use objects of type RUNE

Bugfix in get_pointed_target if it can't find a target - prevents endless
loop

NRSPELLPATHS set to correct value.

Remove null terminator from gods array - not needed anymore.

Fix savethrow array size to match maxlevel properly (was 1 short)

remove damnation and remove curse now cleric spells.

Fix some header code to better work on solaris 2.5

Support for compilation with the dmalloc (debug malloc) package.

Allow altars and related items to match objects based on type.  Use hp
field of altar object as the type to match.

Library patch by Brian Thomas.

Various skill fixes by Brian Thomas.

Alchemy patch by Brian Thomas.  Here is a copy of his README:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
        The amount of work I put into this was substantial; other than
        new code -- I created new archetypes, revised archetypes, altered the
        treasures file and created 2 new object types and a flag.

        It therefore may be enjoyable to install this patch (incl code)
        and *not* define ALCHEMY in define.h. In particular, this patch
        does the following things:
 
         1) more varieties of potions are available in shops.
 
         2) new gems and types of food.
 
         3) monsters will now leave behind body parts when you kill them.
 
         4) if ALCHEMY is defined players may make potions/artifacts.
 
        I have included instructions for installation in INSTALL.PATCH,
        and a brief document for using the code (Alchemy.doc). 
 
        Finally, as always, feedback is appreciated.
 
                                                b.t.
                                                thomas@astro.psu.edu
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 



------------------------------------------------------------------------------
Changes from Crossfire 0.92.3 to 0.92.4:

Various bug fixes to readable code.

Let altars be able to cast spells.  sp field determine what spell to cast.

Fix obscure bug that an arrow can be 'killed' if a monster that has hitback
moves onto it while it is moving.  Thus would then cause problems because
apply would try to remove the object after it had been killed.

Give quetzalcoatl melee attack skill.

Give experience for clawing attacks.

Include literacy skill with fighter skill - this should now give all starting
classes literacy skill.  I think it improves play balance.

Don't mark a players starting money as being start equipment - otherwise
they can't drop it on identify altars and it can get merged with money
gained at a later date, yet still be marked as starting equipment.

Bug fix in keybindings so that we check return of XKeysymToString to make
sure we don't use a null value.  Some keyboards have keys with no names,
and on some systems, passing a null pointer as a string causes it to crash.

------------------------------------------------------------------------------
Changes from Crossfire 0.92.2 to 0.92.3:

Removed ability to use unpaid objects for sacrifices.

Changed weapon improvement code to be based on skill levels (if skills
are used.)

Code in place to generate hit points by average of fighter and overall
level - to enable this, change the #if 0 to #if 1 at around line 1040
in common/living.c

Books hack by Brian Thomas.  This mainly means that when emptry books are
created (or are otherwise on the map), that they will be filled with some type
of information.  Some (like monster/spells/gods/artifacts) are generated via
the program itself.  Information from a messages file that is stored in lib
can also be found.  Experience can be gained by reading this information.

Read/write patch by Brian Thomas.  This mainly encompasses the fact that
players can now write messages in books, that you must be literate enough (as
determined by literacy skill level) to read various books/scrolls.  Scrolls
are now not identified, but literacy can be used to identify them.  Players
can still read signs even if they are not literated (needed for game balance/
information)

------------------------------------------------------------------------------
Changes from Crossfire 0.92.1 to 0.92.2:

Give artifact Gram weapon attacktype physical|confusion. Before, it was only
confusion which would never actually damage anything.

If a player dies in a shop, remove any unpaid items from his inventory and
put them back in the map.  Only applies in NOT_PERMADEATH mode.

Put in better DM security - now checks for name, password, and hostname (any
of those can be wildcarded out) - see the lib/dm_file for some demo.  To
supply a password for dm mode, just use dm with the password (ie, "'dm
<fireball>")

Lighting code added (with various support objects, spells, etc).  No maps
support this yet.

Don't baptize altars if we are in the editor.  Leave altars the way they
are so that they will be baptized the crossfire loads the map instead.

Allow the title of and object to be set from within crossedit.

Allow individual players to set the inventory icon, now longer a compile time
option.

If we get a non critical error and do an emergency save just in case,
then don't remove any information/objects.  This probably fixes the 
disappearing inventory bug.

------------------------------------------------------------------------------
Changes from Crossfire 0.92.0 to 0.92.1:

Improved altar sacrifice code (actually, any object type that calls
check_altar) - treat a slaying field of 'money' as something special- don't
care what form the money is in (see docs for more details)

Improve identify table (in conjunction with altar code above) - now takes
any type of money, won't take money if nothing needs to be identified,
will identify as many things as money is dropped for (ie, drop 200 gold, it
will do 10 items)

In the map attributes in crossedit, you can select an option called
"ShowWeakWalls".  If this is selected, weak walls will be shown in a partial
teardown state - makes working with some maps much easier.

New client updated to support Power and Grace stats.

Magic system broken into 2 forms of magic - clerical and mage (they are
now seperate).  Power stat also added to the game - plays into mage
spellpoint (mana) total.  Grace also added - used for cleric spell casting.

Skill system greatly expanded - different experience types with skills
associated with them (only has meaning if you are using the skill code) - thus
you gain experience for certain categories as you use certain skills - see
doc/skills.doc for more info

Multiple gods added (via config option in config.h) - basically, different
gods have different enemies, and the effects cleric spells have will depend
on this.  Altars are created for different gods.  See doc/Multigod.doc for
more information.  Along with this, some new spells were added.

 Fix a problem of some objects falling out of sight when they shouldn't.

Send delete item to client if decrease_ob reduces the items nrof to 0.

Weight should now be fixed up when transferring stuff to/from containers.

config option called NO_AUTO_SKILL_SWITCH added - it means range type
doesn't automatically get switched to skill type when using melee weapon.
Main effects is that it makes it easier to switch between melee and range
weapons (pretty much makes it like it was prior to the skill code.)

Sack code cleaned up - we don't need to split an object to see if it will
actually fit in a container - we can just say how many we want to try to
put in.

Actually put wimpy command back in (all code was there, just the link to
call the fucntion was missing.)

Increase max count from 9999 to 99,999.  Wasn't that uncommen for high level
characters to have more than 10000 platinum coins.

When invoking spells, temporarily switch the range type to range_magic -
otherwise, a proper check for spellpoints is not done, and it then becomes
possible to go negative.

Modified crossloop so that it renames and compresses any core files created
while it is running - very handy for debugging (note that you could easily 
modify it to remove the core files instead.)

------------------------------------------------------------------------------
Changes from Crossfire 0.91.9 to 0.92.0:

Make sure the weight a container is carrying can never go below 0.

Fixed fall below code, so that objects with visibility will not fall below
objects that otherwise blocks view.

Fixed colormap problems with xpm graphics on black and white displays.

ALLOW_SKILLS is now the default in the config.h file.

IS_SUMMON_SPELL macro fixed (= was supposed to be ==)

Artifact foods added by Brian Thomas.  These are foods that can give some
nice benefits (stat improvements, etc), or be much nastier poisons.

Bug fix made to skill selection that would otherwise cause core dumps.

Bug fix made to query_cost that would cause core dumps if the alchemy spell
was used.

Fixed bug in dimension door that would cause core dumps if cast from a
wand.

find_target_for_friendly_spell fixed to use the get_owner call instead of
referring to op->owner (get_owner should always be used.)  Fixed core dumps
that were caused when the owner would be killed, but still have a pet
monster (vampires as an example.)  get_owner makes checks to make sure
the owner still exists.

Only set the windows colormap if on a color display.

------------------------------------------------------------------------------
Changes from Crossfire 0.91.8 to 0.91.9:

Changed some parameter names from spell to spellnum.  Some compilers don't
like parameter names that match structure names.

Alot of skill code added by Brian Thomas.

Assume that Suns running solaris have strncasecmp.  Also, if using
Xpm_Pix, assume the strcasecmp is available (the Xpm library should
provide it.)

get_player_ob function now uses the CALLOC define, instead of just
calloc.

When dropping items onto objects that blocks view, they now fall below the
object that blocks the view.

XPM mode now works with private colormaps.  It will also switch to a private
colormap if it runs out of color during the xpm creation (works for
crossedit also).

Don't let players put starting equipment into containers.

A bows weapon class (WC) is now used to determined hit probability for
arrows.

When a player dies (in NOT_PERMADEATH mode), the character is immediately
saved.  Thus, if you die there is no advantage to crashing the server,
hoping for a copy of your character from before you died.

Set the value to 0 for arrows created with the create missile spell.

When transferrance is cast excessively, don't hit the person receiving the
spell with 9999 points of physical damage (otherwise, spell can be used to
kill many powerful monsters.)

Made some changes to make it compile properly under Solaris.

Fixed bug in dropall that would cause an infinite loop if the player had
an open container.

Exits can now inflict damage on players.

Fixed middle mouse button missle attack.  Now clears the fire_on flag.

------------------------------------------------------------------------------
Changes from Crossfire 0.91.7 to 0.91.8:

Messages about an objects speed no longer printed to the console.

When players exit maps, no longer inform all the other players.

install-same and install-font directives added to lib/Imakefile - used
if game is being installed to same font it was unpacked in.

Client now supports receiving bitmaps - server does not support
sending them, however.

Max experience achievable is based on max level, not a hard coded
value (although, at present time, max level is hardcoded to 100)

insert_ob_in_ob now returns an object - needed for client/server code.

check_inv function added to button.c.  Trigger will be altered depending if
the character has a matching item (or lack of a matching item.)

Option added to config.h to make it so that backup saves will save the player
back at home, instead of the present map.  Code adapated from code sent
by John Steven Moerk (jsm@axon.ksc.nasa.gov)

Minor bug in crossedit fixed that would cause it to exit if both
-p and -xpm is specified.  Both can now be specified - it will effectively
ignore the -pix portion.

New skills added, with corresponding code to use these skills (from Brian
Thomas) Use of skill code is selectable in the config.h file.

Two new spells: summon fog and steambolt (from Brian Thomas)

Enchant armor code added (from Brian Thomas)

Fixed bug in crossedit that would cause it to core dump whenever a non exit
was selected and then the enter command run.

Fixed bug in attack.c that was using info_all if CASTING_TIME was
selected.

Made it so that decrease_ob_nr will never decrease the object number below
0.  This fixes a bug in that remove_ob would calculate a negative weight,
and then call sub_weight with that negative value.  This ended up resulting
in weight being added to the player instead of subtracted.

------------------------------------------------------------------------------
Changes from Crossfire 0.91.6 to 0.91.7:

Item saving throw changed around - items are only invulernable to attack
types that they are protectected or immune to.  For example, if an item is
protected from magic, and is is by AT_FIRE | AT_MAGIC, it still needs to save
against fire.  Before, since it was protected from magic and the attack type
includes magic, it would not have been affected in any way.

insert_ob_in_map_simple function added.  This is used in functions that what
to examine all the objects on a space, yet insert new objects as it goes
(polymorph).  This function will not merge objects, so traversing the stack
will work fine.  Should fix removing removed object bugs that used to happen
for polymorph (function should be used in other functions that do a similar
thing)

Damage field in objects is now 16 bits (signed).  Needed because some
high level spells would do more damage than could be stored in signed
8 bits.

The 'old' client program no longer compares versions - there is no reason
to, since the client doesn't do anything that requires an exact version
match.

Better handling of the Eutl library added - selection is now done
in crosssite.def.

Large lake faces expanded - now set up like walls, where auto join works.
walls pick file expanded to include this image series and some other walls
that were not previously set.

Pacify spell added - code from Brian Thomas

Show invisible and X-ray spell added (code by Peter Mardahl)

Face data is static - that is to say the the color for any face can not be
changed.  In order to do a face with a different color, a new face needs to
be created (or perhaps linked to the old).  This change was made because for
client/server communication, having a known color for each image greatly
simplify things (also, on monochrome or XPM displays, color information
didn't have any effect). Related changes:

	1) color information is no longer stored in the archetypes file,
	but continues to be stored in the individual .arc files.  collect.pl
	has been modified to store this information in a faces file.

	2) visibility variable added.  This is a face value, and it is meant
	to take the place of the DOUBLE_FLOOR_PATCH.  System will work like
	this if DOUBLE_FLOOR_PATCH is enabled:  the floor and the object
	with the highest visibility + the top object will be drawn.

	3) color can not be changed in maps - in fact, since color is now
	stored in a different file, the color handling for objects has been
	removed.  Note - when loading a map with crossedit, this information
	is silently ignored.  Thus, when then saving the map, the color
	information will be lost.  The maps should be updated with new faces
	if this color information is imporant.  The lib/adm/map_info perl
	program now will print out warning messages for maps that are using
	color changes.  Also, the code in loader.c can easily be changed to
	print out when it loads a color change (disabled because it is too
	verbose for most uses)

PLAYER_COLORS config option and code support removed - with new static face
information above, this can not be supported in any real way.

Shop buildings no longer have is_floor set.  This was a hack for the
DOUBLE_FLOOR_PATCH for XPM mode.  However, enabling it can make it so
objects disappear beneath the shops (due to the way maps save.)  Having
objects not disappear is much more important (IMHO) than having things look
just a little bit nicer for XPM mode.  Archetypes exist for it, but are in
the dev/unused/0.91/7/mood_floor directory, since no maps presently use them

Mood floors added (code by thomas@nomad.astro.psu.edu).  When activated,
these floors can change the mode/flags of monsters (make them aggressive,
make them unagressive, make them fall asleep, or charm them)

New output mode in place - this uses a much smarter buffering method - it
keeps track of several messages, and how often they are flushed is setable
with the output-sync and output-flush commands (a help file does exist).
All the various draw/write functions have been cleaned up, so that there now
exists only 1 front end function (new_draw_info), which takes flags,
priority, object, and the actual string.  The flags are defined in
newclient.h, as NDI_* (in this file because client should use the color
flags sometime in the future, and it makes sense to keep all the flags in
one place).  Priority corresponds to the listen level that the player has
set - the lower priority, the more likely it will be printed.

Certain runes/traps now work properly (things like create bomb and magic
draining would not work if the player is not on the same square as the rune)

When a player kills a window, the players objects will be destroyed
and not placed on the map.

Scrolls, rods, wands, and staves will always be at least level 1.

Beefed up demilich's.  Previously, for the experience they were worth,
it was much to easy to kill them.  Main difference is that now their
speed is 0.25 compared to 0.06

Fixed minor bugs with player movers - if the object to be moved had a
speed greater than 1, it was possible to avoid all affects of the mover.

Objects that slay are fixed up.  Previously, only if the race matched the
slaying type did it work.  Now, in addition, f the race of archetype name
matches the slaying, the object will slay.  This fixes stakes, and probably
a lot of other items that weren't slaying creatures properly.

Changed some of the stat bonuses/penalties for all the classes.  All the
'normal' races now have a net total of 0 (fireborn, wraith, and quetzalcoatl
are not considered normal races, so their totals are unchanged.)

Some of the items in the artifacts file have been fixed up - fixed
spelling errors and errors in placement of the difficulty.

------------------------------------------------------------------------------
Changes from Crossfire 0.91.5 to 0.91.6:

When player stops attacking, make sure his speed_left is not larger than his
normal speed.  Fixes a bug where you could attack a wall, then try to attack
in another direction, and move quite quickly for a short time, since weapon
speed would be used for that short burst of movement.

Drain attacks become attack type physical when the character reaches the
mininum experience possible.

Do not allow equipped weapons to be improved if they would make it too
powerful for the character to use.

errmsg buffer sized increased to HUGE_BUF.  Should fix some bugs that
were causes when this was overflowed in dump_object2.

SOUND_EFFECTS (if selected) is now defined when compiling all files.
Previously, it was only set when compiling files in the server directory -
this had the effect that the player structure was different between the
server and common area.

speed+2 items now increase speed properly.  Values in the computation were
not being cast to floats, so a speed+2 ended up giving the same amount of
speed as a speed+1 item.

Restoration changed around.  The spell will no longer restore depleted stats
- this can only be done with the potion.  The potion is now only generic
restoration - specific stat restoration potions removed.  Also, perceive
self will now tell the player what stats are drained and by how much.

Reduce the amount of experience you get from killing other players to
1/10'th what it used to be.  This should also discourage players from
killing other players.

SAVE_PLAYER removed from configurable options - it is always on.  I can't
see why anyone wouldn't want to be able to use this, and if you really
don't want to use it, removing the save directory would pretty much
work.

Fixed dropall command.  It wasn't dropping all items (seemed to
stop at first locked item.)  Also, 'dropall armour' now drops
helmets in addition to shields and armor.

Fixed heroism potion.  It was casting the incorrect spell (detect curse).
Now it casts heroism.

Fixed bug that would cause remove object to try and remove object.  When
loading maps, an object in a container in a container would not be inserted
(this mostly happened with an object in a chest in an icecube.)  Changed
code in load_objects to a recursive call, which can handle inventories any
number of layers deep.

Fixed bug in drop_all that would cause core dumps.

------------------------------------------------------------------------------
Changes from Crossfire 0.91.4 to 0.91.5

Inventory icons are now updated properly.  Also, the inv_name and look_name
arrays in the player structure have been redone - these are now arrays of
function pointers and use the shared string libraries to allocated and free
storage.  This should take less space than the fixed size arrays that were
previously used.

When buying equipment, weight is now subtracted properly from the player
for the coins that are used.

Maps can now have a fixed reset time.  This means that the map will reset
after a set amount of time, no matter whether it is accessed or not.  Useful
for highly used maps that really need to be reset once in a while.

Bug fixed in get_ob_diff.  The difference array would get overflow,
corrupting other data.  Many core dumps were probably caused by this.

Fixed bug in legal_range routine where legal_range would only check to
first item of type BOW in a players inventory.  This caused rotateshoottype
to not list the bow entry if it was not the first bow equipped.

Cloaks are not always turned into artifacts - normal cloaks can be found now.

Charisma bonus changed around some more.  Penalties are not quite as harsh
for very ugly characters - with the change, a character will never pay
more than 10 times to buy something than to sell that same item.

Various functions changed around and some new ones added so things will
work properly with the new client (still under developement.)  Most notable
changes were to common/xutil.c, with the newclient.c and newsocket.c
files added.

Unpaid items that are alchemied are now worth nothing.

TWO_BYTES_FONT is now a standard.  I can't see crossfire ever going back to
having less than 256 images.

free map->tmpname when it is no longer needed (before setting it to NULL).
this pointer is assigned from a tempnam calls, which (on Sunos 4.1.x) uses
malloc to allocate space.  Note - if this is not true for you system, let me
know, so I can put code in to handle this.

destruction spell (from scrolls) fixed.  This was actually a problem
in that cast_spell was not setting the owner properly.

Magic mapping improved for bw systems.  This actually makes it work like
it used to, with it doing stippling for object.

Casting of director spells changed.  Placement away from characters and
underneath characters now possible

New potion type added - Improvement:  This will raise level hit point or
spell point gain to the maximum value.  It starts at the lowest level (ie,
first hit/spell points gained), and will raise one value to maximum.

Some patches added (From Manfred Weichel, manfred.weichel@mch.sni.de) which
should make compiles on SVR4 work properly.

New artifacts (in lib/artifacts file) added.

Configurable option:  cone attacks no longer propogate through monster - it
will only hit the first row.  

Remove curse/damnation changed so that it will not remove curses which
are a higher level than the spell caster.

Polymorph code changed around.  Greater chance of items being destroyed,
value can never be greater than twice the original value, no mininum value.
Also, now the item value and not clone value is used, so things like
scrolls, wands, rods, etc should have the max price work correctly.  magic
is not maintained, rather, magic*4 is used as the difficulty for creating
the new item, with max_magic of the new item never being greater than the
magic of the old item.  The number of objects remaining after a polymorph
will be less than the original (10 arrows might become 8 bolts, for example.)

You will no longer attack players in the group you are in by running
into them.

Titles now restored properly from save files (only makes a different if
SET_TITLE is defined

When doing a save, check the return value of fclose when writing to tmp file
and the final file.  If either of these writes file, use the backup file
instead (previous save file is renamed as a backup file.)  Should prevent
problems when there are full filesystems of quotas in effect.  The character
will not be saved, but at least an older save file exsists instead of the
character being totally gone (like before.)  Patch from Laurent Wacrenier
<Wacren@Gin.ObsPM.Fr>

Plural names for items that have a 'of' in them is fixed/added.  This mostly
deal with potions (so instead of potion of dexterys, you get potions of
dexterity)  Patch from Laurent Wacrenier <Wacren@Gin.ObsPM.Fr>

query_cost changed around so that value for very low priced items are now
computed correctly.  Before, the nrof of items was multiplied in very late,
and various divisions (for being unidentified) were done previously.  For
low value items, this would result in a zero value.  Zero values still
result for low priced items if you only have 1 or 2 of them, but if you
have 80 of them, a proper value is now generated.

Code to control golems (and in fact many summoned creatures) now fixed.
Help file added about golems.  This also fixes a core dump that was caused
when a summoned creature was around, and another scroll was used.

Modified logger in common directory to no longer create a fatal error if you
get too many minor errors in and the editor is what is being used.  Before,
occasional errors would be reported by the editor (mostly dealing with not
found archetypes in maps), which would eventually cause a fatal error.  This
seemed erratic, because the editor never changes the tick, so loading one
map might result in the fatal error because of the error total from the
previous maps.  Also, when using the editor, having missiong archetypes
probably should not be a fatal condition.

food value can be changed in artifact file.  Food is mostly used to have
various meanings in different objects.  The artifact file has also been
updated about everything that is changable, and what the values mean (ie,
docs are built into the top of the file as comments)

Weapons/armor no longer 'disappear' when a class that can not use such an
item tries to equip a group of them.  That is, if a class that could not use
armor tried to equip 2 chain mails, one of the chain mails would disappear.

------------------------------------------------------------------------------
Changes from Crossfire 0.91.3 to 0.91.4

FLAG_NO_FIX_PLAYER is set before saving the player, and cleared after the
player is loaded.  Before, a character will full sp and hp could be save, and
when reload, not be at full strength.  This is because fix_player was being
called during the load process, before all the characters items had been
loaded and equipped.  This, the maxsp and maxhp values were that of the
character with no items.

Artifacts can now pass the various spell paths to the newly created
artifact.  The values are or'd with the previous spell path values of the
object.

The artifact file now supports objects with name NONE.  If this object is
rolled up when trying to generate an artifact, then no artifact is
generated. This allows for better tuning the chances of having certain
artifacts, by just reducing the chance of having an artifact at all.  The
'type' field of the Object in the artifact field is still required, but any
other fields for the artifact object are not used.

Crossedit fixed so that all the images do not appeared inversed when being
used on a monochrome display.

Changed common/xutil.h so that XPM mode will work on monochrome systems.  In
fact, XPM mode should now work on all systems, previously, the load process
tried to create a pixmap 8 bits deep.  If the X server did not support it,
errors would result.  So while playing in XPM mode on monochrome may be
pointless, this allows play on systems where it may have some use.

libproto.h and sproto.h only check that __STDC__ is defined.  Previously,
__STDC__ had to be nonzero, and not all compilers set this.  Also, in
global.h, if __STDC__ is not defined, return an error.  Many compilers do not
allow _STDC__ to be redefined.

Updated changable variable in crossedit.  Now the various spell paths can
be set in the editor.

SPEED_GAME now standard compile option, and not selectable.  Having it as
an option seemed to create more problems than bugs non speed game found.

Crossfire man page updated.  xledit.man changed to crossedit.man, to
reflect the name of the program it represents.

crossfire.doc updated with more information - mostly about new objects
added to the game.

More help files.

Objects with type CREATOR were added.  The objects, when applied, create
other objects.  Documentation in crossfire.doc.

Object that cast spells (rod, scrolls, wands, and horns) now have a level
associated with them.  This level is used to determine at what level the
spell should be cast, instead of using the owners level, which was typically
used before (allows creation of super powerful wands/rods/horns, but having
them be a very high level.)

Bow, crossbow, bolt, and arrow code redone by Tero Haatanen.  This cleans up
the code, and allows for magical arrows and bolts.

Race can now be changed in the artifacts file.

A spell of Banishment has been added.

Attacktype AT_DEATH is now more potent when if against a monster that
the item also has slayign capability against.

Bug fixed to prevent players from getting infinite experience for finding
the same trap.  Also, experience changed for disarming traps.

------------------------------------------------------------------------------
Changes from Crossfire 0.91.2 to 0.91.3

Changed artifact structure so that items with a chance greater than
255 are now possible.

Object now put into icecubes when hit by a cold spell, like before.  This
probably got messed up in the saving throw re-write, where objects had to be
either immune or protected from cold to be put in icecubes.  In fact, the
reverse was supposed (and now does) happen.  IF an object is
protected/immune from cold, it is also immune from being put in an icecbub.

Fixed up is_magical and need_identify routines to handle more items.  Rods,
scrolls, and spellbooks are always considered magical in nature.  Wands and
staves are magical if they still have charges.  Also, fixed up so that some
of the Artifact items are now detected as being magical.

If player lacks sufficient money to buy from shop, it now prints how much
short he is in standard english string, (ie, 2 platinum 3 gold,etc), instead
of gold.silver format (lacke 44.25 gold).

Inventory drawing changed.  Should be a little more efficient, and be more
efficient on drawing.  With auto pickup modes (that pick up more than one
item), inventory will be drawn after all applicable items have been picked
up, instead of after each one.

Item status is printed next to item image in players inventory if
SHOW_INV_ICON is selected in the config.h file.  It would be nice if better
imagines were designed for the status (right now, just words are printed
out.)

When connecting to the server, a one line welcome message is printed.
Crossclient was modified to ignore this line if it starts with 'Welcome', so
changing it may cause problems with crossclient.

Potion of restorations are now handled by means of different archetypes and
treasure lists, instead of having special code in the program to handle
them.

If a RUNE is found in an object inventory when free_object has been called,
remove the rune instead of dropping it to the ground.  This is so that traps
(runes) disappear when the object they are placed on is destroyed.

Doors are now trapped, and be detected & searched just like chest
traps.

Map difficulty can now be set in the map, and not be calculated at map load
time.  Crossedit has been modified so that 'Attributes' now contains a
difficulty field, and if set, this will be used when loading a map (it is
stored in the level field of the map).  If this value is 0 (default), then
the old formula for calculating the difficulty will be done.  The advantage
of this is that map creators can now set the difficulty of the map more to
their liking, and certainly do a better job than the program can do.

Pickup by value density fixed.  The number of items is now taken into
consideration (before it did not, so a lot of arrows would be picked up,
because the total value divided by the weight of 1 arrow was greater than
the pickup value.)

Bug fixed in query_cost.  Before, for F_TRUE value, unless the item was
worth more than 10,000 sp, F_SELL value would be calculated instead of the
true value.

Merge several small files in common.c into one file called porting.c.
porting.c contains common functions that are called by crossfire.  This
allows system dependent code by be in one file, instead of scattered
throughout the program.

-listen_port <num> command line option added.  num is the port to use for
connections, instead of the default (13326)

Instances when a variable name is the same as a structure name have been
fixed (by changing the variable name).  On some compilers, this is a
problem.  I can not be sure that all such cases have been fixed, as I have
not found a way for gcc to create warnings in this situation.

Random happenings when a spell fails due to encumbrance has been added.
This option is configurable in the config.h file.

Trap code added.  Chests and doors can now be trapped.  'search' and
'disarm' commands added.  old 'search' command was changed to 'search items'

Inventory locking added.  Makes it so that items can be locked in a players
inventory, and will not be dropped when a 'dropall' command is issued.
'inv-lock' and 'inv-unlock' commands were also added.

'gsay' command added for party mode.

Spellbooks can now have their slaying field set to the name of the spell
that the spellbook is of.

Debugging output disabled in crossedit.  It produced copious amounts of data
that has little relevance except for the developers.  It can easy be turned
back on by editing the crossedit/include/debug.h file.

Artifact gems (worth lots of money) and amulets added.

Invisible object now appear in crossedit.  Fixes a problem, but now makes
use of the global 'editor' variable, making it likely it won't be obsolete
any time soon.

Artifacts (in artifacts file) can now have nrof field that will be used to
generated the number of items instead of the treasure list.  If the nrof in
the artifact is 0, then the standard treasure list nrof is used instead.

Artifacts can now grant reflect missile and spell ability.  Also, by setting
stand_still, the objects will not be animated.

------------------------------------------------------------------------------
Changes from Crossfire 0.91.1 to 0.91.2

Some options now standard part of game (SHOP_LISTINGS, Line of Sight).  The
config.h (for this release) contains these options, but they are commented
out with the note they no longer do anything.

Changed value pickup to pick up things based on true value, and not sell
value.  True value is how much the item is worth without applying charisma
bonuses.  Before, if two different characters used the same pickup mode,
different stuff could be picked up because of charisma differences (or even
if a character gained charisma, the same pickup mode may not work as it did
before).  By using true value, pickup mode operates the same between all
characters,

Items of type TREASURE can now have their experience set, and this will be
used for the difficulty of the generated treasure instead of the map
difficulty (as was done with shops).  If experience is not set, then the map
difficulty will instead be used (or 14 in the case of shop floors).

Cure poison actually cures it, instead of reducing the duration.

Don't use fseek when loading in map files.  Some systems do not support
fseek on pipes (which are used for compressed files).  Instead, just
set the variable with the data we read, instead of seeking back and
re-reading it.

Transferrance spell changed so that supercharging will have bad effects
(first confuses the player, then a large fireball is created (with player
losing all spellpoints)

Poisoning made more vicious - it does more damage based on the level of the
creature that uses it (level/2 in fact).  This makes it so that very tough
creatures that poison someone will have the poison do serious damage.
Also, damage caused is no longer random.

 Chests can now contain multiple items.  Code changed to handle this
properly.  Treasure is also always dropped on the floor (Even if the chest
is in an objects inventory.)  hp field used in chests (and in fact all
treasures) to determine how many objects to create (thus, a chest with 3 hp
will have 3 objects created).

Crossedit now draws a rectangle around the selected area.  Reversing the
color of the images did not work in XPM mode.

Have client.c include "includes.h".  includes.h sets up all the name defines
properly (ie, __sgi__, __sun__)

SP_* functions changed (by Rupert Goldie) to take an object pointer instead
of a level value.  This makes adjustments for spell costs (via stuff like
spell paths) easier to make, because now only the SP_* functions need to be
changed. With the object structure, checking for known paths (or perhaps
other things in the future) can easily be done.

Bombs will now be dropped before exploding.

New attack type (God Power) added.  The cleric cause wound spells use this
attack type.

Charm monster spell added.

Party system re-written by Scott MacFiggen <smurf@soda.berkeley.edu>.
Characters will now only share experience if on the same map, and other
features were also added.

Modified check_item function (used in creating weapons with the improve
scrolls).  The objects being sacrificed do not need to be in one group (ie,
two groups of 4 potions of dex will now be counted as 8 potions).  This only
applies to potions, since some can be identified and others not identified.
Also, cursed or damned items will not count towards sacrifice count
(although, they will be consumed).

Changed way cancellation works on items.  Before, if cancellation hit a
player and the player failed the saving throws, the items got no saving
throw versus cancellation (only if their absolute magic value was less than
RANDOM()%6 did they survive).  Now each item gets a saving throw.  Note that
if a container makes a saving throw, then the items inside do not need to
make saving throws and are unaffected.

A separate function did_make_save_item was split off from
save_throw_object.  did_make_save_item justs checks to see if the item made
its saving throw based on the tables (and any protections or immunities
grants it an automatic save, as before) save_throw_item calls this function,
and in addition, does the appropriate actions (burns up items, turns them
into icecubes, calls cancellation, etc.)

Saving throw method changed.  Before, each item got 5 chances to make a save
for each item it is composed of.  Now, it gets one chance for material it is
composed of.  Then, based on the number of saves it made, and the number
materials it is composed of, an overall made save/failed save is
determined.  This change is to make it easier to figure out saving throw
values, and hopefully make adjustment easier.

Saving throw tables updated.  In general, each item is +5 compared to what
it was before.  This should hopefully make it so that items have about the
same success rate they did before.

Crossedit modified to preserve value of connected field when cut/copying and
pasting.  Before, an object that was copied/cut would also have its
connected field reset to 0.

More XPM images colored.  Filenames for the river directory have been
re-done, to actually make it a bit clearer of what does what.  The archetype
names were not renamed however, to keep compatibility.

World expanded.  Another row of maps was added to the southern edge.  The
world maps were also renamed to a world_xy format, where x is a letter
and y is a number.  This represents the x and y location of the map, making
it easier to figure out how maps related to each other.

Map spaces can prevent magic user spells, cleric spells, or both.  Before,
an anti magic square prevented all types of spell casting.

Have monsters regenerate spell points even if they don't cast a spell.
Monsters have a 1:3 chance of casting spells, irregardless of any other
factors.  Before, spellpoints would only be regenerated if it got past this
check.  Also, some monsters (dragons, chinese dragons) have had their max
spellpoint and regeneration rates increased to correspond with the higher
cost of casting their breath weapons.

Altars now will also match on the slaying field of the object being
sacrificed.  This is similar to how keys and special doors work.  With this
change, it is no longer required to make a unique item that then needs to be
sacrificed (ie, the dagger, the cup, and the crown for the old city
quests).  Instead, a cup, and crown can be used, with the slaying field set
appropriately (unfortunately, will not work for weapons, as it will think
that is the monster to do extra damage against.)  However, the altar code
always did match item name, so calling it something special like 'The
Dagger' and have the sacrifice look for that should also work.

Spell encumbrance code added.  More you are carrying the higher your
chance for failure.

------------------------------------------------------------------------------
Changes from Crossfire 0.91.0 to 0.91.1:

Fixed bug in the enchant weapon code.  It was not allocing enough
space for the string, and thus would corrupt the heap.

Minor fix to spells.c.  IT was using strdup instead of strdup_local,
which caused the compile to fail on some machines.

No longer gets errors when adding a player on a map that is not
loaded in a multi player game.  Before, process_events would see that
the player has no object, and could get enough errors to cause the game
to quit.  Now, it suppresses errors if it is only loading objects
for that map.

Default map difficult for treasure that is created in shops was changed from
9 to 5.  In this way, the likelihood is higher that good items will be found
in dungeons, not in the shops (there are very few items with difficulty
above 9)

Archetypes cleaned up.  All archetypes that were not being used in a map
were moved to dev/unused/0.91.1.  Note:  There are still a few archetypes
that are not used in any maps, but these are part of a collection (ie, one
section type of a wall).  This was done really because there is no reason to
have archetypes that are not being used to be in the official distribution.
It could be misleading for people looking through the arch directory (ie, 'I
thought I looked at all the maps, but never saw this monster').  Also, I
have no problem moving these archetypes back in, once some maps actually use
them.

'grass' and 'sea' are no longer animated.  There are a few reasons for
this:  1) The animations never really were that interesting, 2) being
animated put them on the speed list, and being that over all, they are the
second and third most used objects, this is a performance hit, and 3) With
pixmap and xpm images, re-draws are only done on squared the have changed
(really improves performance).  However, with them being animated, they
often changed, so that more re-draws were needed.  The old archetype and
image files are in dev/old (in arch distribution) if you actually want to
use the animated versions.

Put a limit of 70 on damage bonus for weapons.

Treasure lists expanded.  The old treasure lists (in treasure.c) have been
removed, and treasure lists added to the treasures file added to take their
place.  The treasure file has been expanded have list transitions, and
treasure lists in which 1 object on that list will be generated.  Archetypes
(shop, random, and chest) updated to use the randomitems field to determine
what treasure list to use to generate the items.  Advantages of the new
method:  Ability to better tune treasure probabilities, re-compiling not
necessary in order to update treasures.  the create_treasure function was
modified to add an extra argument - this is used to keep track of how many
times it has been called on this attempt to create a treasure.  In this way,
infinite loops (with list transitions) are avoided.  Generate treasure
replaced with a simpler function that calls create_treasure, and returns the
object.  create_treasure takes a treasurelist instead of a integer
treasurelist number, like it did before.  The crossfire.doc file has
been updated about the new treasures file capabilities.

Chests are now created with their treasure as their inventory (this mostly
happened because of the treasure changes above).  Advantage is that when a
chest burns up, its treasure may remain (or may be burned up).  Before, when
a chest was burned up, its treasure inside was not created.

Rolling multi-part objects should now work better (not perfect, however).

Carrying an open bag with a mode that picks everything up will no longer cause
an infinite loop.

Crossedit changed to draw selected areas as a black box.  Fixes some problems
with display in XPM mode.

Fixed bug that would cause game to crash when pets were summoned.  Problem
was an infinite recursive loop, that would then cause the system to run out
of stack space.  Solution is to decrease the speed_left of the object before
one of the function calls.  This makes it so that at some point, one of the
functions will not be called.

When a rune is cast, use the s->archname for the archetype name, and
not hard coded strings.  Cured a bug with rune of transference.  Also,
allowed several case statements to be merged.  Really, no archetype names
should be used in spells.c, when casting spells.  The archetype name should
be gotten from the spell structure.

If a button is being updated on a map that is being saved, just return
from the function.  Prevents errors 'object has speed but is free'

Fixed bug that caused objects that got a speed_left of exactly 0 to
be frozen.  This was because speed_left >0 to have the object be processed,
and <0 to have speed added.  Now, speed is added if speed_left <=0.

Some minor changes made to hopefully make it compile on AIX systems without
any modifications.

process_active_maps now called when a map is being loaded.  It should
hopefully work properly, since enter_exit was modified to not use any
static variables.  Also, process_events was modified to take a map as
an argument, and if non null, only update objects on that map.  That makes
process_map obsolete.  process_active_maps was also changed to still process
even if there is only one player.
Crossfire should let players still perform actions when a map is being
saved.  Problem is, handling a map that is in the process of it being
saved, and having a character enter it.  Crossfire needs to finish
saving that map, then re-load it and insert the character.  Large changes
to how player interact with loading & saving of maps would probably
be needed, and probably should be done.

You no longer lose luck if you kill yourself, and the player who kills another
player now loses the luck (before, the player killed would lose luck).

Now inventory display modes - unpaid, cursed, magical, nonmagical.  All pretty
self explanatory.

------------------------------------------------------------------------------
Changes from Crossfire 0.90.5 to 0.91.0:

Some new maps added to the standard distribution (Magara and some of
the esben maps).  Magara was added as a place to depart to by ship, the
esben maps were merged in as new buildings or towers on existing maps, not
as a new continent.

Keyboard buffering is now selectable via 'keyboard' command.  Before,
an attempt to remove keystrokes from the X Events queue was made, but could
not always remove all of them.  Now, it should remove all of them, or none
of them, depending on the keyboard buffer setting.  The value will be
saved with the player.

Pickup mode value now saved and restored from the characters save files.

Inventory and look window should only be re-drawn once when selling
an item.

Calls to draw_stats in common/living.c will only be made if the object
type is a player (should prevent some warning messages)

Fixed create earth wall spell so that it uses bdur as the base hit
points of the wall (instead of bdam).  This will prevent some core dumps,
because otherwise, the wall can have 0 hit points.

Program should not core dump when person quits that game and the map he
is on has been swapped out. (ie, person saves or quits the character,
but the map gets swapped out before they type 'q' to the play again
question)

Word activated teleporter code added (Peter Mardahl).

Who can become DM, based on their user id, can now be set in the dm_file
(assumed to be in lib.) (Tyler Van Gorder)

Tell should now work properly (Eric Mehlhaff)

Cloak code added (Peter Mardahl)

Objects can not grant invisibility, make_invisible variable added to
archetype files.

Added information to the crossfire.doc file (was missing several
attack types and materials).  Added better information on what some of
the flags do.  Noticed that will_apply 4 applied for both scrolls
and earthwalls, now only applies to earthwalls.  To have a monster
use scrolls, can_use_scroll should be used instead.

Code added to deny users or sites from connecting.  This is to prevent
users who intentionally crash the server to connect and start up a window,
which they then crash the server with.  Patches from Tyler Van Gorder.

Two floors will can now be drawn when using XPM mode and this options
has been selected in config.h  This allows for towers to sit on top of
grass to look proper.  From Gregor Schmid <schmid@fb3-s7.math.tu-berlin.de>

Patches that modified 'create food' spell.  Better food (ie, waybread)
will be created at higher levels, and the caster can also specify what
type of food to be created.  From Peter Mardahl.

Spell paths added by Rupert G. Goldie <rgg@aaii.oz.au>.  Simply put, 
each 'spell path' contains a certain category of spells.  Objects and
races can be attuned, repelled, or denied certain paths (objects would
apply the the person wearing them).  Attuned allows casting of spells in
that path at lower cost and greater efficiency, repelled paths are cast at
a higher cost and lower efficiency, and denied paths can not be cast at all.
Thus, a wand of small fireball that is attuned to Fire would cast more
powerful fireballs.  A character wearing a ring that is denied the path
of fire could not cast fire spells at all.  Right now, no items will
be created using these features, and no characters have any of these, but
these might be added in the future.  Look at the spell-paths file in the
doc directory for a little more information.

Pickup mode 6 (pick up magical items) will not pick up known cursed items.

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Object structure and process_events changed.  Now, a separate list
us used to keep track of active objects (objects whose speed is nonzero).
All objects on the active list are still on the normal list, but
process_objects only needs to go through the active_list for objects
to process, saving a lot of time.  The cost is adding two
pointers (active_next and active_prev) to each objects.  But the speed
gains are well worth the minor memory cost.  the 'malloc command
was changed to display the number of objects on the active list -
note that there is zero memory usage for these, since these objects
are also on the normal object list.

Programming note:  Any time an objects speed is changed (doesn't
happen too often), a call to update_ob_speed(object *) must be
made, so that the object can be added or removed from the active
list, as appropriate.

In testing, I first ran crossfire, with process events using the
normal object list, and printing out error messages if it found
objects that had speed but were not in the active_list.  I cleared out
a couple warehouses in Navar without any errors.

Then, I switched to using the active_list, and printing out errors if
it found objects on that list with zero speed.  I cleared out the
mages tower in Navar city without any errors.
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 


Selling items now works properly (it only failed to work if
AUTO_SAVE was not set previously, and the value of the item was
beyond a certain amount.)

Look window code changed so that it does not erase the unused area 
unless necessary.  Also, when a player moves, freeze_look is set.
This was changed because the functions that move_ob calls update the look
window, and the window was being updated 3 times each time the player moved.

When poisoning ends, it no longer core dumps.

Inventory window updated if reading an unidentified spell book and you
already know that spell.

Casting rune spells now works properly.

Spells now (once again) sorted upon loading of characters.

------------------------------------------------------------------------------
Changes from Crossfire 0.90.4 to 0.90.5:

Bug fixed with window titles getting their names changed. (Tero Haatanen)

Container code changed around.  Containers can be locked, they can be used
from the ground.  FLAG_CONTAINER removed, since there is already a type
container, and bonus removed from object structure (Tero Haatanen)

insert_ob_in_ob sorts objects, so items with more magic are before those
with no magic bonuses even for unidentified.  It also uses the absolute
value of the magic, so it should be a little more difficult to know if the
item is cursed or not.

Added unique-flag and UNIQUE_ITEMS define. All items which have unique flag
are saved to directory .../lib/unique-items. A filename is mapname + ".v" +
number, where number is normally 01, but if two or more server is running
same time it can be also greater.  This feature can be used to banks and
inns to save permanently items.  The code is one limitation: if map contains
unique item which can be carried away from map (e.g. an unique excalibur)
there must be at least one unique item on map which can't be carried away.
This is because unique items are loaded from original map only if unique
items file doesn't exit. If all unique items are carried away from map then
they are loaded back next time when someone enters that map.  This should
not a problem if map makers remembers this. (Tero Haatanen)

Editor by Jarkko Sonninen. He added toggle button into attribute window and
made map's reset time and timeout so that they can be configured in maps. He
also fixed map archetype, so that map default stating coordinate is (2,2)
like before.  This seems break a gatehouse map, where it use default value
on map (changed 0 to 2), but it's easy to fix.

Change check_walk_on (common/object.c) so it no longer calls the draw_func.
This eliminates a problem of seeing flashes of areas that should be blocked.
This is because the draw function it called would re-draw the game window
before the variable to re-calculate line of set was set.  As I see it, this
function call was not needed in any case, because this is called during the
players movement.  After the player moves, the draw function is called from
the process_events (now process_players1) function.  This should also
conserver a little cpu time, and bandwidth.

Coin code in shop.c changed.  Patch from Kjetil Torgrim Homme made it so
that coin value can be changed in archetypes and the shop code should still
work properly.  I made changes so that the number of coin types is set with
a #define, making adding new coin types easier.

AUTOSAVE, SAVE_INTERVAL, and NO_EMERGENCY_SAVE should now work properly.
See include/config.h for more information on these options.

Changed it so that updates to other maps will not be performed while
loading a map.  This caused a bug if two players entered exits
at the same time.  One or both of the players may end up in incorrect
locations, all exits in that location may be closed, etc.

Saving throw table expanded to handle all materials and attack
types (Peter Mardahl)

Fixes so that Turn Undead does not do physical damage (Peter Mardahl)

Patch to make it impossible to prepare multiple weapons at the
same time (Peter Mardahl)

Added 'sea1' archetype.  This is the same as the sea archetype, but allows
for walk on.  Its purpose is to use for backgrounds behind boats and similar
objects.  Because it will probably be needed in so many places, I decided to
make an archetype, instead of editing the variables inside crossedit for the
object.

Removed xbm_values array.  This was used to map a face number to that face
location in memory.  Since the bmaps file is created automatically without
any holes, this is not longer necessary.

Archetype for wonder spell now in place.  This will prevent core
dumps when  the spell is cast.

Pixmaps will now be freed upon exiting Crossfire.  They will also be freed
after emergency saves are performed.  This fixes the problem that some
X-Terminals would not free the memory used the the pixmaps otherwise, and
run out of memory.  This fix pertains to both -pix and -xpm mode.

Patch to hopefully double death problem/core dumps with NOT_PERMADEATH
mode.

Changed the size of the temporary string that is used when loading
messages.  For a few very long messages, 1024 bytes was not enought.

Patches put in Crossedit to allow for XPM mode.  From Petri Heinil.

Cleaned up the code for look window.  Now, everything agrees (ie,
when you click on something in the look window, it is actually
that object.)  Likewise, invisible objects are not displayed
anywhere.  This should also fix a bug of not being able to enter
some building by clicking the middle mouse button on them.

Added help file for pickup.  Explains the 8 basic pickup modes
plus the value-density pickup mode.

Detect magic will detect magic on all items in a stack, not just the
top object.

Spells fixes (From Peter Mardahl):
  1)  Identify modified to identify items on the ground if inventory is
        identified.
  2)  Detect magic spell finds magical runes and makes them more visible
  3)  AT_CHAOS and AT_COUNTERSPELL reimplemented so that they are not
        treated as special cases by the move_cone function
  4)  Magical walls created by spells (firewall, frostwall, ....) are
        fixed

If a map is reset, that map is then removed from the list of map objects
(what you see when you type 'maps ).  This way, the 'maps commands only
displays maps that are reasonably active.  This change should also save a
little memory.

make depend now descends into crossedit/Cnv to depend there.

Changed some of the colors in the xutil.c file.  This is so that it uses
the same colors as the official colors for XPM files.  It would have been
better to make those colors part of the official XPM colors to start
with, but it is a bit late to do that now.  The change of the xutil.c file
was made so that crossfire would not use quite as many entries in
the colormap.  The change in colors should be quite minor.

Two new pickup modes added - one picks up all money and gems, the other
all magical items.

Removed a lot of dead code from the various header files.  removed
hiscore.h from distribution (wasn't declaring anything that was not
being declared elsewhere.)


------------------------------------------------------------------------------
Changes from Crossfire 0.90.3 to 0.90.4:

Many more XPM images now properly colored.  NOTE TO COLORERS: A few minor
changes have been to the xpm.template file (palegreen has been replaced with
green3, and a more medium orange has been added.)  I replaced palegreen
because it was very close to the 'green' color already present.  And a
medium green was lacking.  A medium orange was also lacking, so I added one
in.

New pickup modes, that can be based on value density (from
Peter Mardahl <peterm@soda.berkeley.edu>)

Spells now have a casting time. (From Matthew Zeher <matt@cs.odu.edu>)

Added libproto1.h file.  This will be used for function prototypes
are affected by certain settings (ie, SPEED_GAME).  This way, people
should not need to run 'make proto'

New XPM loading method.  Creates montage of the xpm files,
so that not as many calls to XPM are needed.  This has reduced loading
time to about 30% of what it was before.  Note: This done mean it takes
some more memory at start up, as the montage has to be stored 
temporarily.

Changed charisma bonuses.  At 30 charisma, it will no longer be possible to
buy an item, and then sell it for more than you bought it for.

Graphic exposures turned off on the GC's that are used in the game window.
Should improve performance.

When a raise stat spell ends, the proper message (ie, You look ugly, you
feel less intelligent, etc) will now be printed out.

If player NOT_PERMADEATH mode, and you die, a stat will only be decreased
one.  Before, that stat was decreased one, and the max stat was set to that
value.  So if the player was poisoned, or a stat was lowered due to some
other reason, that loss would become permanent.  Now, both the stat and
orig_stat only gets decreased by one.

invoke.c removed, cast_spell modified to handle what invoke.c did.

Keep old shoot type if reading a scroll, instead of it being set to none.

Raise stats spells should be progressively more costly (From Peter Mardahl)

Should now be able to handle broken pipes without problem (ie, telnet
session closing unexpectedly).  Made it so that listen level 0 on a socket
means that draw_all_sockets will not write to that socket.  Crossclient uses
this so that it does not get unexpected messages, and thinks that it failed.

Added 'set font' option.  This basically unsets color pixmaps or xpm mode.
If crossclient was run without -xpm or -pix mode, it will send this command
to use fonts.  What this means is that set (font,pix,xpm) should set that
display mode.  Before, the display selection it defaulted to for crossclient
seemed unreliable at best.

Fixed memory allocation problem in commands.c (it was writing to more
bytes than it had allocated)

Draw message window almost complete re-written.  In an effort to cut
down on flashing of the the status bars. ( Niilo Neuvo <anipa@guru.magic.fi>)

More bug fixes for spells (from Peter Mardahl)

Fixed some bugs for compiling on the Alpha running OSF/1 1.3

------------------------------------------------------------------------------
Changes from Crossfire 0.90.2 to 0.90.3:

Added -xpm command line option to crossclient.

All spells should not be handled in the switch statement in spells.c

Let players buy zero value items from shop.  This really shouldn't be a
problem, the only zero value items of any use might be wands with very
few charges.  If someone wants to buy poison or cursed items, they should
be able to.

Fix spelling error of command line argument 'detatch'.  It is now
spelled properly (detach).

Change draw_color_pix in server/xio.c.  It now draws the images to an
intermediate pixmap, and then draws that to the screen.  May or may not be
quicker (XSetClipOrigin only needs to be set once), but it does prevent
flicker.  Also add two more GC's to the player struct, to make these
operations faster.

Unless XPM_PIX is defined, draw_color_pix will note be compiled in the
code.

Fixes to make it compile on both Solaris and NeXT machines (hopefully)

Removed PLAYER_COLOR #ifdefs and lines they control out of login.c.  Those
were not needed any more.

Added 'mapinfo' command to valid input commands.

Only have crossfire display -m as a valid command if it was compiled
with DUMP_SWITCHES set.

Changed install procedure to only copy those files necessary to playing
into lib.  Also, don't install obsolete scripts into the bin directory
when installing.
-----------------------------------------------------------------------------
Changes from Crossfire 0.90.1 to 0.90.2:

Cleaned up the display from 'maps.  Now things line up nicely.  It
doesn't print the name anymore, and truncates the path at 18 characters.
But this doesn't make a difference for most maps, and now you can actually
see what variables are set to what.

Experience requirements changed.  Initial values from Peter, but I changed
them to be more round numbers.

Change targets in server and crossclient from ComplexProgramTarget
to AllTarget, DependTarget, and NormalProgramTarget.  This is because
ComplexProgramTarget expects man pages in those directories, which do
not exist.

Moved data initialization out of treasure.h and into common/treasure.h.
In theory, no data initialization should be done in the .h files, it should
all be done in the .c files, with the .h files declaring the appropriate
externs.  Likewise, no .c files should have extern's for other data
functions, they should include the appropriate .h file to get those
externs declared.  This would fix the problem of having to go through
the various .c files whenever one of the data structures change, to update
all the externs made to it.  Since the compiler will check to make sure that
the extern in the .h file and the actual declaration in the .c file are
the same, it prevents errors of mismatched declarations (ie, having
something like char s[40][20], which at later point gets to
char *s[40], but some files still think it is supposed to be s[40][20].)

Changed doc/Imakefile so that make install.man will actually install
the man pages.

Characters that dies who were poisoned should have the poisoning
removed.

Changes from the Berkeley Folks:
What we've done that's in this server code that I know of:

--level dependency added to many spells.

--level dependency tunable on the fly by editing the spell_params
  in the 'lib' dir and using the dm command 'spellreset'  spellpoints
  and spell level are also changeable on the fly.

--many new spells added
--protection spells can now superimpose, as can gain stat spells.
  repeated applications of protective or stat spells yield diminishing
  returns.

--runes added--an implementation of magical traps.  any spell may
  go in a rune.  Read the documentation.

--new spell interface.  invoke <spell> invokes that spell immediately.  Some
spells can take parameters now.  invoke magic rune <spell>
will store <spell> in a magic rune.  invoke  <spell> will not set the
range spell.  cast and prepare are synonymous.

--Certain spells cannot be set as range spells now--less than 10 of these.
These are spells which no one would want to use more than once in a while,
like magic map.

--A hack to object.c in common dir which makes objects created by objects
with owners owned by the creating object's owner.  (This allows players
to get credit for a kill with the meteor swarm spell, which creates a
'swarm' object, which in turn creates the meteor objects.)
-- End of Berkeley additions.

New maps and archetypes added.

Crossedit can now load maps that are compressed.

Add Solaris 2.x compile support.

Now prints out what the scroll name was that turned to dust.

Minor artifact changes (ring of ice is blue, ring of fire is red)

Horn range weapon now works properly, via using the + and - keys.

New input method (From Jari Vanhala <jam@modeemi.cs.tut.fi>).  Looks like
it should now be possible to define keys to do most every command.  Made
a few minor changes to default key file to make the present set up
act like the previous one.

Fixed triggers and magic mouth.  These devices will now open gates
as would be expected.  The problem was that the opening routine
expects to see the op->value of these to be one, in order to open the
gate or whatever.  Changed routines to toggle value between 0 and 1.
Note: As I understand, trigger handles return to their original state, but
keep the same value.  That is, you pull the trigger handle, the handle returns
to its original position, but gate opens.  Pull handle again, handle returns
to same position, but gate now closes.  Or at least that is how I implemented
the devices.

Make some more changes to the is_magical routine.  Hopefully, it will now
detect all rings and amulets that are magical.  Also, it should not
detect monsters (or any living object) as magical.

Fixed bug with Color Pixmaps (XPM).  Would try to free the pl->pixmaps
area twice, causing core dump.  Looks like the same thing should have
happened when using bitmaps also.  In any case, only one free(pl->pixmaps)
is now performed.

Bug fixed with XPM code, in which 'floors' would appear to be
carried around with the player.  This is because the players pixmap did
not change, and hence, it did not update that square.  Now fixed.

Random encounter bug might now be fixed (patches from Frank)

New FLAG method used.  flags in the object structure is now an array,
and SET_FLAG, CLEAR_FLAG and QUERY_FLAG functions are now used.  This reduced
a lot of code in common/loader.c

 Fixed bug in common/object.c in expand_objects function.  Looks like
braces were missing from for statement, so the the prev and flag fields of
the new objects were not being set properly.

 Fixed bug that could cause core dump if trying to print map message when
no message existed. (From Tero Haatanen <Tero.Haatanen@lut.fi>)

 Starting character will have uncursed, undamned and identified items
at the start of the game. (From Tero Haatanen <Tero.Haatanen@lut.fi>)

-----------------------------------------------------------------------------
Changes from Crossfire 0.90.0 to 0.90.1:

 Crossedit 0.7 was merged in with the 0.90.0 source.  This once again creates
a common distribution.

 I tried to retain the best features of both programs.  This means that
the artifact code, and cursed/uncursed items (from CF 0.90.0) remain.
But I also used the filepaths for fonts, elimination of omaps for
internals use, and creation of partially processed bitmap file for
bitmap reading.

 The general patch method was to keep the cf 0.90.0, and create a diff
file for crossedit 0.7 from crossfire 0.89.3.  These patches were then
applied.  Many had to be implemented by hand.

 There are some exceptions.  The crossedit program is almost the exact
same thing as in the crossedit 0.7 distribution.  I made a few minor changes
to clean up compiling, but otherwise, no serious changes were made.

 The archetypes (lib/arch) structure was also taken from crossedit 0.7, as
well as most of the archetypes themselves.  I think the breakdown makes
things much easier to handle for changes or improvements.  NOTE: it is
likely that directory (lib/arch) will not be in the standard distribution,
but will instead be a separate file (to keep the size down).  The various
files (archetypes, bmaps, font, etc.) will be created for the distribution.
All new archetypes from cf 0.90.0 were merged into the structure, as well
as a few minor changes in the old archetypes I noticed.

 The maps are from the crossfire 0.90.0-a-maps distribution.  A few
simple programs (in lib/adm) were used convert them to use fontpaths
and to change some monster names that conflicted with character classes.
Note: Because in the old format, a 'food' field was used to determine the
map to link to, it is possible some of these fields were changed when
they were not supposed to be.  This is because some other archetypes
(altars for one) also use the food field.  If you notice any converted
by mistake, please let me know.

 A few minor memory leaks and other patches have also been applied.

 Other specific changes to this version:
'set' now gives better help message (like what can be set.)
XPM code added.
Fixed bug in 'who', which would cause a core dump if done when
	another playing was still creating their character.
	'who' also display the map path of the other players, and not
	the map name.  Map names seldom seem to be set.
The crossfire.cfb and crossfire.pix files (in lib) can be compressed.
Fixed bug that caused core dumps when pet monsters were summoned.
If restoring a saved game, and the map it was saved on does not exist,
	start them on the standard starting level.
Added option in config.h, that allows full ring and amulet descriptions
	to be printed in inventory and look window.
Hopefully fixed bug which caused game to dump core when player died,
	if NOT_PERMADEATH was set on.
Add flag HAS_MAGIC, and use that for the detect magic spell.  This way,
	artifacts that have no magic, will still be shown as magical.
	So will rings that change abilities, etc.  Doesn't work
	quite perfectly, but seems to work as well as the old method.
Fixed bug so that if it can not find a map, it just prints that
	that exit is closed, instead of panicing.
Have it re-draw the look window when you middle click on something (ie
	apply) in that window.  This fixes a bug with bags/sacks, of it
	not updating when an item is used directly from a sack.

