Jump to Main Content

Crossfire 1.6.0 Announcement

Crossfire 1.6.0 has been released.  The main change for this
is a completely redone spell & skill system.  As usual, there are
also the typical large number of bug fixes.

Only the bigworld maps are up on sourceforge - this is the only
mapset under active development - the old smallworld maps are
still in CVS, and older versions still available for download.

Client 1.7.0 has been released to coincide with the server release.

There is no crossfire-sounds distribution - the sounds are unchanged
from version 1.4.0

Files released for this version:

sums (bsd)  filename
61927  2107 crossfire-1.6.0.arch.tar.bz2
54101  2238 crossfire-1.6.0.arch.tar.gz
01542  1011 crossfire-1.6.0.doc.tar.gz
15700 14584 crossfire-1.6.0.maps-big.tar.bz2
37487 19761 crossfire-1.6.0.maps-big.tar.gz
40511  3802 crossfire-1.6.0.tar.bz2
32510  4230 crossfire-1.6.0.tar.gz
60906   449 crossfire-client-1.7.0.tar.gz
40581  1830 crossfire-client-images-1.7.0.tar.gz

Sums (md5)
43ae2f034511f515836156457d25a1a4  crossfire-1.6.0.arch.tar.bz2
779f51826f915ad7538069aadb268856  crossfire-1.6.0.arch.tar.gz
ef4cbd387f0fe2ddb1c570ee08127467  crossfire-1.6.0.doc.tar.gz
e5aa783d65ba8c224a75f075d3820ab1  crossfire-1.6.0.maps-big.tar.bz2
50807b87153adf68e9e0e07bd1a79849  crossfire-1.6.0.maps-big.tar.gz
4a488134c9437b0b341d7c4bab4dd5ae  crossfire-1.6.0.tar.bz2
cac617806c2430821f8bd918726a66e1  crossfire-1.6.0.tar.gz
ef405f78d54be0bf22feeef6b4fc0d73  crossfire-client-1.7.0.tar.gz
cbf4b4480bd6fd28cf0e71a06b288127  crossfire-client-images-1.7.0.tar.gz

crossfire-client-1.7.0 is the client (X11/GTK) distribution - standard
X11 and gtk interfaces are provided.

crossfire-client-images.1.7.0.tar.gz is a prebuilt image file for
the client - downloading this file will reduce the amount of download
that needs to happen during play if the -cache option is used.  This
file should be untarred in the ${prefix}/share/crossfire-client
directory, where ${prefix} is the --prefix option given when configure
is run.  The default path is /usr/local/share/crossfire-client/.
If you are updating clients, there is not much reason to download
an updated image archive.

crossfire-1.6.0.tar.gz contains the server code with prebuilt
archetype and image files.

crossfire-1.6.0.arch.tar.gz contains the unpacked archetype changes.
This is not needed if you only want to compile the server and play the
game. Many new archetypes/images.

crossfire-1.6.0.doc.tar.gz includes prebuilt spoiler (postscript
and html) documentation, as well as other documentation.  If you
are playing on a remote server, the doc file may be useful.  Note
that the playbook is fairly inaccurate in areas.

crossfire-1.6.0.maps-big.tar.gz contain the new map distribution - this has a
much larger outdoor world.  Note that if your server was previously using the
smaller map set, you will need to use various scripts include in Info/ to
update unique maps and other exits.  See the Info/README file.

FOR FIRST TIME USERS:  You will only need the appropriate server, the
map file and client file.  You do not need the arch file.  You may wish to
get a copy of the doc file.

If you just want to play the game at some remote server, you need the client
and perhaps the image archive file.

Crossfire is avaible on the following ftp sites



The initial upload of this release is only made to sourceforge - it should
show up on the mirrors shortly.

Mark Wedel
April 27, 2004

Complete changelog:


configure, Makefiles: Rebuilt for 1.6.0 release
doc/*/Makefile.am: Modified to use one makeps.pl utility in scripts directory.
doc/scripts/makeps.pl: Make this the definitive copy - fix problem with it
    trying to combine big images when it doesn't need to.  Remove other copies.
doc/playbook/chap1.tex, doc/playbook/chap5.tex: Fix some obvious errors,
    but overall, the playbook is still quite out of date.
doc/playbook/treas2-extract: Have it not include abilities in given items,
    have it properly deal with multiple underscores in arch names.
doc/spoiler-html/spoiler.html, doc/spoiler.ps: Rebuilt
MSW 2004-04-26

server/apply.c: apply_savebed() - make call to terminate_all pets before
    call to remove_ob() so that pets are properly removed.
common/item.c, server/c_object.c: Fix code so that skill tools (talismans,
   holy symbols, etc) are properly describe.  Clean up formatting of long_desc()
MSW 2004-04-25

Change most shop buy/sell functions to use 64 bit values.  Problem arises
where player would sell valuable item, and if they wanted to buy them back,
it would overflow a 32 bit value, so they could buy them back for free.
Note quite as odd when you consider the buy/sell price for really valuable
items to be very different.
include/global.h: Add UINT32_MAX and other max type defines for our typedef
    values so that we have standard setting of what the cap is.
server/apply.c: Change get_payment call to take second argument.
server/plugins.c: Add note about bug in handling of query_cost in this
server/shop.c: query_cost() now returns 64 bit.  Many other functions
    updated to also take/return 64 bit cost values.  Have cost_string
    nicely deal with values that are beyond affordability.  Rename get_payment2()
    to get_payment(), and remove the later, which was just a simple wrapper
    function that called get_payment2.
server/spell_effect.c: Update alchemy code.  Remove some suspect use of
    static values.
MSW 2004-04-24

server/apply.c: fix check_weapon_power() so it operates on overall character
   level and not skill level - this matches up what the out of skills
MSW 2004-04-20

common/button.c: Patch by Bernd Edler to have proper speed set for items
   activated by buttons.
server/apply.c: Apply the 'special prayer' marker stuff, since it wasn't
   used anymore.
server/gods.c: Check for FLAG_EQUIP on spells and not for a special prayer
   marker to guess if a spell is a god given spell or not.
server/spell_util.c: Patch by Bernd Edler so that firewalls are immune
   to casting time.
MSW 2004-04-17

server/shop.c: Decrease adjustment limit for expensive items to 10000 to get a
    continuous adjustment function. That is you will get much less when selling
    items with a value between 800pp and 2000pp.
Andreas Kirschbaum 2004-04-16

common/map.c: Change blocked_link() to take a map parameter.  Also, change code
    in blocked_link() to assume that the caller has set up appropriate map and
    coordinates related to tiling (in all functions that currently call
    blocked_link, this is the case)
include/libproto.h: Rebuilt.
server/move.c, server/player.c: update call to blocked_link to include the map.
MSW 2004-04-15

common/object.c: Change CAN_MERGE() so that it compares the stats structure of
   the objects being merged.  Fixes problems of rings improperly merging with
   other rings that have different stat values.
server/monster.c: Modify check_earthwalls() and check_doors() to take a
   map structure as an option parameter, and use that structure when
   calling get_map_ob.  Fixes a crash in cases where earthwalls/doors
   were at the edge of a tiled map, and creature was on other map moving into
server/move.c: Change move_ob() to adjust coordinates for tiling, and
   pass in these adjusted coordinages (and map) to the check_() functions
   in monster.c
random_maps/treasure.c: Apply patch by Andreas Kirschbaum so that it does
   more work in trying to place keys on maps.
MSW 2004-04-13

common/living.c: Patch by Bernd Edler to remove cap on exp for players.
MSW 2004-04-09

common/item.c: If potion wasn't given a random spell, use the archetype
    name when it is identified.
common/treasure.c: Fix potion codes so that healing and magic power potions
    get the proper spell inserted into them.  Also fix line termination issue.
server/skill_util.c: Add check in skill_attack() to make sure current_weapon
    is not null - there has been some crashes here, but I can't figure out
    how it gets to this state, so better to at least handle it.
MSW 2004-04-07

server/player.c: In flee_player(), make sure the enemy to the player is
    on an actual map - fixes crashes.
MSW 2004-04-06

common/potion.c: Fix up change_abil() to more properly deal with potions -
    characters could get 0 stat values.  Also, messages were not being properly
    displayed.  Patch is slightly modified from one sent in by Bernd Edler.
MSW 2004-04-05

server/main.c: Add extra checking for valid map coordinates after we grab
    them from the destination map itself - if a map is broken and has
    default enter_ coordinates outside the maps range, this previously
    resulted in a crash.
server/pets.c: Pass the correct map object into insert_ob_in_map().
MSW 2004-04-03

server/monster.c: fixed wiz's hidden mode not working on monsters.
Ryo 2004-03-28

include/win32.h: added 'const' specifier to str-related functions.
Ryo 2004-03-26

server/resurrection.c: fixed %lld to %I64d for Windows.
Ryo 2004-03-26

server/attack.c: Add scare_creature() function, which sets FLAG_SCARED
    and also sets up appropriate enemy.  Clean up some formatting in
    other functions, and fix friendly fire - move it out of the loop for
    all attacktypes (can be after we have figured out max damage).  Also,
    has a bug where if an attach wasn't doing any damage, friendly fire could
    actually make it do damage (eg, fear spell).
server/player.c: Fix up flee_player() to be map tile aware.  Also, add
    call to flee_player() in handle_newcs_player() so player will run away.
MSW 2004-03-24

server/attack.c: Add missing skill=NULL in kill_object() - can be rare
    cases where the proper skill can't be found.
server/move.c: Fix push_object() so that it also updates the pushers/
    pushees map - should only happen in tiled map cases.
server/pets.c: Fix summon_object() so that if a summon cult monsters was
    cast, we try to find the god from the owner.  If still can't find the
    god, just return instead of crashing.
server/rune.c: Change trap_disarm() to call destroy_object() on the
    trap object, so that all the trapss inventory is also destroyed
    and not dumped on the ground.
server/skills.c: Only players without arms to steal.
server/spell_util.c: Change cast_spell to set up the skill pointer for the
    caster even if the caster is the wizard.
MSW 2004-03-22

server/treasure.c: patch from Bernd Edler to enable multiple
    'allowed' lines in artifacts.
Ryo 2004-03-12

Those fixes make DMs more 'stealthy' (when hiding/unhiding).
Also use yet unused colors for player join/leave, and DM join/leave.
This way those messages appear in a different window in split window
mode, to make the messages easier to spot.
server/apply.c: change color for player leave message.
server/c_misc.c: let DMs see hidden DMs.
server/c_wiz.c: make DMs more stealthy.
server/login.c: change color for player joining message.
server/main.c: change color for player joining/exiting message.
Ryo 2004-03-12

common/item.c: Fixed calc_item_power() to return valid item power for
    items with high enchantments.
Andreas Kirschbaum 2004-03-07

server/spell_effect.c: small patch by Karla Stenger to put player's name
    in the 'race' field of marking runes. This way, a DM can know who wrote
    a rune, in case it has some bad vocabulary :)
Ryo 2004-03-06

server/spell_attack.c: change check_cone_push function to use arch weights.
move function up for resuability and change to check_spell_knockback
include/sproto.h: change function name
TM 2004-02-28

common/image.c: removed unused variables.
common/item.c: conditionally remove unused variables.
common/map.c: conditionally define variables, unused under Windows.
include/global.h: turned off a conversion warning under Windows.
Ryo 2004-02-28

common/living.c: changed 'signed char' to 'sint8' for set|get|change_attr_value.
common/map.c: map size is sint16, for arch_blocked.
include/libproto.h: update prototypes for set|get|change_attr_value and 
random_maps/rproto.h: changed prototype for surround_flag3.
random_maps/wall.c: changed surround_flag3 to use sint16 instead of int for map
server/apply.c: attribute values are sint8 in eat_special_food and
    apply_changes_to_player. Some explicit casts.
server/player.c: map coordinates are sint16, in hideability.
server/spell_attack.c: map coordinates are sint16, not int.
server/spell_effect.c: stats are sint8 in cast_change_ability. Map coordinates are
    sint16 in move_aura.
server/time.c: generate_monster doesn't return a value.
Ryo 2004-02-27

common/living.c: Have give_skill_by_name() update the skill pointers in the
    player object.
server/spell_attack.c: Properly set maxhp in the cone spell - this is used
    in ok_to_put_more() to make sure one spell doesn't hit a single space
    too many times.
MSW 2004-02-23

common/object.c: Change CAN_MERGE() so that we never merge applied objects -
    whether or not they are rings.
lib/*: different spell for dragons vs players for firebreath - update
    treasures so monsters use ability version.
server/gods.c: Add missing call to link_player_skills(), resulting in players
    having multiple praying skills.
server/skill_util.c: Change learn_skill() so we don't create a skill pointer
    for the player if they didn't learn the skill (even if they can't use
    such a created skill, it is still a bit confusing).  Fix finding of
    hand to hand skills to make sure the player can in fact use the skill
    in question.
server/spell_attack.c: Fix cast_cone() so that it properly hits all directions.
MSW 2004-02-22

include/define.h,server/shop.c: Apply patch by Bernd Edler that gives
    bargaining experience based on the amount of money a character saves.
    Higher the bargaining skill, the more money they can save.
MSW 2004-02-16

doc/Developers/spells: Update type on casting_time - include suggested value
   for times so that results are hopefully more coherent.
lib/archetypes, treasures.bld: rebuilt.
lib/treasures: Change some of the 'spelldirect' types to just the actual spells,
    so that two seperate archs don't have to be maintained.
server/c_wiz.c: Add some basic sanity checking to command_remove() so that
    we don't unnecessarily crash.
server/skills.c: write_scroll() - have it reset value of the scroll so that
    the scrolls so inscribed by players have better chance of merging.
server/spell_attack.c: cast_cone() - if the caster is a trap, have it hit
    the center space, so that characters who detonate cone traps will get hit
    by the effects.  Also, reduce range of cone spells if they are going
    in all directions, compared to being targetted in a speciifc direction.
server/spell_util.c: cast_spell() - put lower limit on player speed_left value
    when casting spells - since higher up the calling stack, the player speed
    is also reduced, we need to set the lower limit here so that the player
    isn't out of action longer than they should be.
MSW 2004-02-16

include/map.h: removed unused fields from wmapdef..
include/object.h: removed unused field from object.h. Changed glow_radius to 
sint8 to be
    coherent with struct MapSpace.
include/player.h: removed unused fields from player structure.
server/apply.c: removed unused known_spell field.
Ryo 2004-02-16

common/object.c: change get_owner() so that it also returns no valid owner if
    the owner is removed.  This fixes a crash if a player quits but is still
    sitting at the play again prompt when something he owns kills something.
server/skill_util.c: Fix show_skills() so that if the character has too many
    skills for whatever reason, we don't crash, and instead print an error
    to the player.
server/spell_attack.c: Fix typo - not sure actual effect, but probably nothing
    good. '+ +' should just have been '+'
MSW 2004-02-12

common/Makefile.am: Clean up proto - lex seems to toss some new symbols in
   now days.
common/map.c, common/object.c, server/player.c, socket/item.c,
    socket/request.c: change parameters of get_map_from_coord from int to
    sint16, so the op->x,op->y can get passed directly in.  Update callers of
    this function.
lib/archetypes: Add damned 1 to the shop floors.
server/pets.c: Fix problem with big (multisquare) pets following the owner
    across tiled map boundaries.
socket/item.c: Fix problem of players being able to see everything within
    containers by just looking at them.
MSW 2004-02-10

common/treasure.c: add_abilities(): For potions and horns (spell casting
    objects) convert the other_arch into a spell and put into the object -
    otherwise, the spell casting object casts the wrong spell.
common/object.c: Clean up formatting of copy_object.  Only real code change
   is to fix events - copied event data wasn't getting malloc'd, and thus
   when another object of that event was freed, it freed the event data
   for all objects derived from it.
common/treasure.c: Fix fix_generated_item() so that books generated by
    monsters with no_pick set don't inherit that for the book itself.
    Still do it for other objects of the creator type.
MSW 2004-02-08

server/c_object.c: fixed sack_can_hold for the 'won't fit' cast,
     missing 'return 0'
server/gods.c: applied Karla Stenger's patch, making sure 'praying' is
     applied when becoming fellower of a god
Ryo 2004-02-08

Changed map-building to work on non-unique maps too.
server/build_map.c: removed check for unique map.
Ryo 2004-01-19

Added map-building code. This lets players change unique maps,
     adding & removing walls, doors, stuff like that.
         New item types BUILDER & MATERIAL. New item flag FLAG_IS_BUILDABLE.
         New range attack (builder).
Changelog: change prescribed date format to be coherent with usage :)
common/loader.l: added 'is_buildable' flag.
include/define.h: added defines for item types & subtypes, and item flag.
include/player.h: new range type 'builder'.
include/spropo.h: new function apply_map_builder.
server/apply.c: handle new range type.
server/build_map.c: new file, handles all build-related code.
server/c_object.c: added 'buildable item' to examine function.
server/Makefile.am: added build_map.c to compilation.
server/player.c: handle new range type.
socket/info.c: handle new range type.
Ryo 2004-01-18

Fix a crash related to plugin hooks
common/object.c: clear_object(): object's event's hook/plugin/options
     are initialized with FREE_AND_COPY, so they are shared strings.
     Better to release'em with FREE_AND_CLEAR_STR instead of
     FREE_AND_CLEAR, else nice crashes...
Ryo 2004-01-16

Fix writing not inserting correctly item in inventory, and Windows-
     specific stuff too
server/skills.c: write_scroll(): Better to insert spell in scroll,
     and not the other way around
server/skill_util.c: fix Windows-specific int64 stuff.
Changelog: fix Mark's 2003 to 2004 :)
Ryo 2004-01-16

Fix a bunch of crashes observed on metalforge:
server/player.c: do_hidden_move(): Move call to find skill so that it is
     always called.
server/skills.c: write_scroll(): Fix freeing of spell object in
     scroll - newscroll->inv isn't valid after calling remove_ob, so
     need to copy object to temporary pointer first.
server/spell_effect.c: cast_detection(): Pass in skill to use.  If no
     skill in use, use the caster object - fixes pointer derefence
     as op->chosen_skill wasn't always set.
server/spell_util.c: modify caster_level() to always return at least 1.
     Fixes pointer potential divide by zero problems - also guarantees
     that players will be able to cast first level spells even if
     repelled to that spellpath.  ok_to_put_more() - Fix to use correct
     map pointer variable.  find_target_for_friendly_spell() - make it
     so it handles tiled maps OK.
MSW 2004-01-15

common/object.c: fix the monsters on tiled maps bug that I may have
     mentioned a while ago.  Seems that the server assumed that all
     parts of a multi part monster are on the same map as the head
     while moving.
DVS 2004-01-12

common/living.c: fix fix_player() so that character gets benefits/penalties
    for sp/hp/grace/etc regen bonuses as related to the god they worship.
server/player.c: dragon_ability_gain(): Modify so that character now gets
    attacktype of new ability that they gain.  Also, add code so that
    the characters face/animation can change (getting set to values the bonus
MSW 2003-12-27

common/object.c: Set op->events=NULL in reset_object(), and move the
    clearing of the op->events structure to be before the memset in
    clear_object() - this was otherwise resulting in a memory leak,
    as memset would clear the pointer without actually freeing the data.
server/attack.c: Fix indentation of hit_map(), modify it so that attacks
    won't destroy items with no_pass set.
server/login.c: set op->speed=0, call update_ob_speed() before calling
    reset_object() - fixes problem with players not moving with recent
    changes to initting the active lists to NULL.
msw 2003-12-20

server/skills.c: changed NDI_UNIQUE to NDI_BLACK for the meditation
    message (so that messages can correctly be grouped, also makes it
    coherent with praying).
Ryo 2003-12-20

Those fixes deal with gcc3.3 infinite loop.
Fixes (except sizeof/memset) courtesy Bernd Edler.
common/item.c: use right buffer size for safe_strcat.
common/object.c: clear active_next and active_prev when cleaning an object.
include/define.h: fixed *curlen=maxlen-1; instead of *curlen=maxlen=1;
socket/init.c: initialize whole ns->inbuf.buf, instead of setting first
    element only to 0. Also allocated with a sizeof( unsigned char ) * size,
    in case size changes one day. And initialize some more fields.
Ryo 2003-12-18

Those changes deal only with warning cleaning under Windows.
Mostly, using the right type at the right place, or doing explicit casts.
common/object.c: changed free_arr_[xy] to short[] instead of int[].
include/global.h: changed free_arr_[xy] to short[] instead of int[].
    Changed Windows-specific comments to C-style comments, not C++-style.
include/sockproto.h: play_sound_player_only takes sint8, not int, for
    coordinates. play_sound_map takes a short for the sound number.
socket/image.c: some type fixing, explicit casts.
socket/init.c: Windows-specific type fixing.
socket/lowlevel.c: explicit casts to char for SockList_AddInt64
socket/request.c: fixed types to match function parameters, or added
    explicit casts when needed.
socket/sound.c: play_sound_player_only takes sint8, not int, for
    coordinates. play_sound_map takes a short for the sound number.
Ryo 2003-12-14

server/rune.c: Fix it so that players won't be hit by traps if they are
     not next to them when set off (firing arrows at a door for example).
server/spell_util.c: Fix spell_failure() to properly damage player if they
    fumble.  Fix cast_spell() to not complain about not having enough
    grace if the spell doesn't take grace.  Add same check for mana, but that
    is much less likely, as harder to get negative mana.
socket/request.c: Fix problem where map sending code was not properly avoiding
    duplicating the head of a big image on multiple layers.  This bug most often
    manifested itself of player standing on lower right corner of large building,
    and something else standing on other portion of building - player would seem
    to disappear.
MSW 2003-11-30

lib/adm/collect_images.pl: forced binary mode for written files.
    This lets the script work correctly under Windows.
Ryo 2003-11-29

server/apply.c: correctly display learned skill's name, and not the
server/skills.c: make 'sense curse' and 'sense magic' check items
    on the ground too.
Ryo 2003-11-25

common/loader.l, loader.c: Fix firewalls so that their spell is properly
    initialized - uses 'dam' and not sp for those objects
server/apply.c: Fix check_weapon_power so that it finds proper wc object.
    Fix unapply_for_ob so that it won't unequip cursed/damned weapons if
    player switches objects.
MSW 2003-11-11

bulk of this is to fix exp loss when changing gods if you have more than
2 billion exp, removal of spells when you switch levels, and not giving you
all new spells when you switch religions.
common/living.c: Update exp functions to be fully 64 bit aware.  Don't
    take away from player total exp if SK_SUBTRACT_SKILL_EXP is passed in.
common/utils.c: Add 64 bit version of random_roll(), called random_roll64()
lib/treasures:  Make indentation consistent for some treasures.
server/apply.c: Use the FLAG_STARTEQUIP to denote god given spells, instead
    of using special prayer markers.  This simplifies the spell learning
    and removal code.
server/gods.c: Make exp loss for changing religions 64 bit compliant.
   Fix become_follower() so that it doesn't give all the new gods special
   spells if you switch religions.  Fix code so that it properly removes
   all special prayers from previous god, and also print out message on what
   spells you lost.  Don't set the prayer skill as applied in various
   areas - this results in two skills being applied, which isn't proper.
MSW 2003-11-09

common/living.c: Win32 compilation fix (levels is sint64, not uint64)
include/plugin.h: new hooks for free & fix_player. Required for Win32.
include/plugproto.h: new prototypes for CFWFreeMemory and CFWFixPlayer,
    wrappers for free( ) and fix_player( ). Required for Win32.
include/sproto.h: added prototypes for new plugin hooks and improved tell
    command helper.
plugin/plugin_python.c: wrap calls to fix_player, free and free_object
    with plugin ones when memory allocated by CF's main exe. Required for
    Win32 to work correctly.
server/c_chat.c: improved 'tell' command to accept first letters of player
    name only, case-insensitive. If 2+ players match, returns with a failure
server/player.c: new function find_player_partial_name. Returns player whose
    beginning of name matches specified string, NULL if more than one matches.
    Fix move_player to check specified direction's validity.
server/plugins.c: added wrappers for free( ) and fix_player( ). Required for
    Win32 compatibility.
Ryo 2003-11-07

common/treasure.c, doc/Developers/spells: Fix generation of rods so they have
    enough charges to cast the spells.  Update documentation on what maxhp for
    the archetype of rods means.
MSW 2003-11-01

server/player.c: Fix crash in stand_near_hostile when it is called on
   tiled maps with player near edge.
MSW 2003-11-01

Various bug fixes:
common/arch.c: Fix item_matched_string() so that it only passes in the length
    of the pssed in name in the strncasecmp(), and not the shorter of the
    passed in string or item name.  Otherwise, if player does a 'drop wand of',
    unidentified wands (name just wand) would match.  Similarly, if a player
    did 'drop ringmail', unidentified rings would match, etc.
common/living.c: Fix fix_player() to always process the praying skill with
    respect to resistances and whatnot.  This is necessary because the
    god give abilities are put in this skill, and those shouldn't go away
    depending on if the skill is in use or not.  Also fix bug in add_exp
    routines which wasn't multiplying permanent exp by PERM_EXP_GAIN_RATIO
common/object.c: Fix find_obj_by_type_subtype() - had extraneous semicolon
    after the for loop, so the if code that was supposed to be for each object
    was never called and instead would crash as it would get called with tmp
    was null.
server/attack.c: Fix problem with kill_object() not finding proper skill -
    it would use the skill object instead of the skill.  Fix problem of
    poisoning not setting up proper skill name in poisoning object.
server/c_range.c: If player is invoking a spell, don't update their
    range_magic value.
server/skill_util.c: Fix divide by zero problem if improperly passed
    skill object.
MSW 2003-10-26

common/glue.c, common/button.c, include/define.h, funcpoint.h, libproto.h
     server/init.c:   Add trigger_marker (type #52) which is a Marker that can be
     triggered. Useful for placing forces in player when connected trigger is 
TM 2003-10-26

common/glue.c, common/object.c, common/player.c, include/funcpoint.h,
     server/init.c, server/monster.c, server/shop.c, server/skill_util.c:  add
     find_skill_by_number() function - this replaces find_skill.  Locate new
     function in skill_util.c, which is more a proper place than
     common/player.c - this change necessitated adding glue function pointers
     so the other common files can call it.
server/spell_effect.c: Fix cast_heal() so if the spell is not one that heals
     hit points, don't process the code that checks for that and sets
     a false success value.
socket/metaserver.c: Clean up formatting - no code changes.
MSW 2003-10-25

server/apply.c: small fix to apply_spellbook in the rare case when
    the spellbook contains no spell (happens when DM issues a bad
    'create' command for instance :).
Ryo 2003-10-04

server/c_new.c: fix command_run and command_fire so they check
    the given direction is [0..8]. This enabled weird things like
    hitting non-adjacent monsters.
    Patch by Karla Stenger on cf-devel, slightly modified by me.
Ryo 2003-10-21

common/arch.c: fix item_matched_string() so that matching makes sense -
    the ordering was wrong, so that we would match something with a low
    priority, and skip over looking to see if that same object would get
    a better match.  Order the function so that we look for the best
    matches first.
MSW 2003-10-08

socket/request.c: Clean up some compile warnings.  Improve big face
   handling - there were cases where data wasn't being sent when
   it should have, and vice versa.  Basically, do better checking
   to see if we should send a big face for a particular layer, and
   also better checking to make sure we don't send the same face more
   than once for the same layer.  Also, change esrv_map_scroll()
   to clear out spaces that appear into view - adds a little extra bandwdith,
   but necessary because otherwise the fact there is a big face on the edge
   doesn't always get sent.
MSW 2003-10-07

TODO: various updates.
common/button: Old patch by David Seikel: change inventory checkers so that
    the monster/player is also checked against.  And do more proper for checkers
    that check against slaying or race - if the trigger doesn't have
    those set, we don't want to compare a null against another null and
    get success).
server/apply.c: Change apply_shop_mat() so that it removes unpaid objects from
    monsters (or thrown containers for that matter).  Old patch by Bernd Edler
    to improve messages dragons get for eating various food types.
server/player.c: Add another missing call to fix_player().  Modify
    move_player_attack() so that the target player doesn't hit back if
    they are the WIZ or on a battleground
MSW 2003-10-06

utils/player_dl.html utils/player_dl.pl.in: New files - scripts for allowing
    character directories to be downloaded over the web.
configure.ac: Add check for 'tar', so that we can put it in the script above.
Makefile.in (All of them): Changed because TAR variable propogated to them.
MSW 2003-09-30

server/time.c: Real change is to add a missing call to fix_player - without
    this new players would be getting messed up maxsp/maxgrace values.  Cleaned
    up formatting in move_player_changer() while doing the other change.
    MSW 2003-09-28

common/living.c, include/libproto.h: Update some functions to take 64 bit int
    values for exp usage.
random_maps/random_map.c: Don't ever make rogue maps symmetric -
    creates unconnected maps.  Clean up layoutgen() to not have a bunch
    of duplicated code.
MSW 2003-09-25

server/skill_util.c: Call esrv_send_inventory on the cauldron if we
    performed alchemy.  Needed for cauldron's contents to get updated.
    MSW 2003-09-23

   Modified files:
     TODO common/anim.c common/arch.c common/button.c common/exp.c
     common/init.c common/item.c common/living.c common/loader.c
     common/loader.l common/logger.c common/object.c
     common/re-cmp.c common/readable.c common/recipe.c
     common/treasure.c doc/Developers/objects
     doc/Developers/protocol doc/Developers/python
     doc/Developers/skills doc/Developers/spells
     include/Makefile.am include/Makefile.in include/attack.h
     include/config.h include/define.h include/global.h
     include/includes.h include/libproto.h include/living.h
     include/map.h include/newclient.h include/newserver.h
     include/object.h include/player.h include/plugin.h
     include/skills.h include/sockproto.h include/spells.h
     include/sproto.h include/timers.h lib/Makefile.am
     lib/Makefile.in lib/animations lib/archetypes lib/artifacts
     lib/bmaps lib/bmaps.paths lib/collect.pl.in lib/crossfire.0
     lib/crossfire.1 lib/faces lib/formulae lib/settings
     lib/treasures lib/treasures.bld lib/adm/collect_images.pl
     plugin/plugin_python.c plugin/include/plugin_python.h
     server/Makefile.am server/Makefile.in server/alchemy.c
     server/apply.c server/attack.c server/c_misc.c server/c_move.c
     server/c_object.c server/c_party.c server/c_range.c
     server/c_wiz.c server/commands.c server/disease.c
     server/gods.c server/init.c server/login.c server/main.c
     server/monster.c server/pets.c server/player.c
     server/plugins.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/swamp.c
     server/time.c server/weather.c socket/info.c socket/init.c
     socket/item.c socket/loop.c socket/lowlevel.c
     socket/metaserver.c socket/request.c socket/sounds.c
  Added Files:
  Removed Files:
     include/skillist.h lib/skill_params lib/spell_params

     Updated code for skill + spell code.  skills and spells are now objects.
     tuning these now means changing the archetypes.  New spells can now
     be added just by making a new archetype.  Lots of code cleanup
     also done.
     MSW 2003-09-12

         common/object.c, treasure.c
         server/attack.c, skill_util.c, skills.c, rune.c, time.c, player.c,
         apply.c Established new type traps distinguished from runes.  Traps
         are more mechanical in nature, not impacted by detect magic or
         counterspell (maybe in future once skills are settled out more fine
         tuning changes in detecting and disarming these too...).  Traps also
         can now trigger connected objects if they are detonated.  Migrated
         traps to new type and made new generic trap archetype for more complex
         trapping (ye olde red shaded tile...)  TM -2003-09-04

         Added friendly_fire to attack.c, called from hit_player.
         Will put a cap on maxdam that is a percentage (1-100%) of damage (min
         1) based on SET_FRIENDLY_FIRE value when players attack in peaceful
         mode.  Changed who, statistics to show this setting better and added
         help file for peaceful.  It would be nice to have a indicator in the
         client for this as well.  TM - 2003-08-25

         Changed the way smoothing is done. Switched the smooth
         command to binary mode, rebuild archetype files, added doc
         on smoothing, updated protocol file.
         Changed a the "togglemapextended smoothing" to "togglemapextended
         smooth" to prevent problem of compatibilities with previous cvs
         smoothing releases.
Tchize 2003-07-08

         Added new command to send extended map informations to the
         client. Mainly used for now to send smoothing informations.
         Also commented the modifications in the protocol file ind doc/
         Changed to install the smooth file too. Needed by smooth code
common/loader.l and loader.c
         completly reworked get_ob_diff to improve speed at mapsave time.
         For now function is interlaced with commented old code. Will clean
         up when code will be proved working. (hope middle of july)
Tchize 2003-07-03

server/apply.c: Fix auto_apply - missing else, causing extra
    treausres to be generated inside of shop tiles.
server/monster.c: Fix npc_call_help to be map tile aware.
MSW 2003-06-18

lib/collect.pl.in: Modify it so that it will collect .trs (treasure) files and
    build a treasures.bld from that as well as the existing treasures file.  In
    this way, treasure information for objects can be put in the arch
lib/Makefile.am, Makefile.in: Modified so that it copies over the
    treasures.bld to treasures in the destination directory.  Have
    the collect directive also build the images, so that a double
    make isn't necessary.
lib/treasures.bld: Added file - like the archetypes, this is the pre-
    build treasure file.  Until .trs files are added, this will just
    match the treasures file with some additional comments.
MSW 2003-05-26

common/map.c: Fix bug causing unnecessary crashes - ok for the map
     to match if the object has been removed.
socket/loop.c: Only make call to draw_client_map() if we have a valid
     map to draw.
MSW 2003-05-26

common/anim.c: Patch by AV to make sure multipart monsters animations
    stay in sync.  MSW 2003-05-25

server/apply.c: Fix bug in that we weren't calling esrv_map_scroll()
    when player used a shop map but lacked sufficient funds to pay
    for his items.
MSW 2002-05-23

common/item.c, common/utils.c, include/config.h: Add #define NEW_MATERIAL_CODE
    and checks in the other files for this - if this is commented out
    (default), then the new material naming code is disabled - material
    names won't be put in the items names as shown in the inventory
    (can still see material by examining an object), and objects that are
    created will be created with the default material (eg, iron for
    most armor/weapons, eg, brass, bronze, copper items won't show
    up anymore).
lib/settings: Add comments from the old config.h file that describes
    what the options already does.  Having no comments in this file
    or in config.h anymore is very unfriendly.
MSW 2003-05-20

server/player.c: Have players start at max hp/grace/sp.
MSW 2003-04-14

server/c_range.c: Add check to make sure we are actually removing a
    golem and that the object hasn't been freed/recycled and the
    player not updated.  Fixes crashes.
MSW 2003-04-13

acinclude.m4: Update path to find python includes, since aclocal.m4 gets
    derived from this file.
configure.ac, configure: Add utils/scores.pl to list of files to substitute on.
common/loader.l, loader.c: Add subtype for objects - will be used in future work.
common/object.c: Add subtype diff check in CAN_MERGE()
common/porting.c: Have it use SAVE_DIR_MODE when doing the mkdir, and not have
    hardcoded 777 permissions.
doc/Makefile.in, doc/Makefile.am, doc/Developers/Makefile.am,
    doc/Developers/Makefile.in: Move some of the spell docs around and merge
    them together
doc/Developers/objects: Add notes about subtype.
doc/Developers/spells: New file, contains preliminary work on spell objects.
include/config.h: Remove command about DM_MAIL and LIBDIR from file, as they
    are options no longer present.  Update comment about SAVE_MODE, and add
include/object.h: Add subtype field to object.
server/login.c: Have it use SAVE_DIR_MODE when doing the mkdir, and not have
    hardcoded 6700 permissions.
utils/Makefile.in: Updated to know about scores.pl
utils/scores.pl.in: New file - reads player file to generate HTML score
MSW 2003-04-04

TODO: Various update
aclocal.m4,configure: Update path to find python (fix again)
common/image.c: Minor update to a ocmment in the code.
common/los.c: Add missing P_OUT_OF_MAP checks that resulted in some incorrect
     LOS calcuations.
include/funcpoint.h: Remove draw_func function pointer.
lib/Makefile.am, in: Remove bmaps.paths to from being installed or being part
     of distribution - bmaps.paths is only needed when collecting the image
lib/*: Rebuilt
server/c_object.c: Patch by Bernd Edler to have the apply functions take into
    acount if the item is equipped or not when looking for good matched items.
server/commands.c: Move printlos to normal commands.  I don't think it reveals
     any information that is in any way harmful.  And since it dumps the
     output to the players screen, no concern of it filling up log files.
     Also, when doing LOS debugging, it is pointless to have it as a DM command
     because LOS is ignored for DM's.
server/disease.c: Modify remove_symptoms to remove all symptoms the player
     may have a disease.  Modify infect_object() to not allow a creature to
     have more than one instance of the same disease.
socket/info.c: remove draw() - instead, draw_client_map() can be used,
     as that is most the only thing draw() did anyways.
socket/loop.c: Update draw() calls to draw_client_map()
socket/request.c: Remove special handling for darkness==4 cases (first
     space that is in full darkness) - this is extra complications and causes
     display problems.  Update draw_client_map() to include the little bit
     of logic that draw() had that this function did not have.
MSW 2003-04-01

common/glue.c, include/funcpoint.h: remove draw_func() pointer - no longer
    needed, so code that sets up pointer removed.
lib/*: rebuilt - facings added to old player animation information.
    ruined_temple archetype added.
server/init.c: remove set_draw() function
server/player.c: remove call to draw() - socket code takes care of this.
MSW 2003-03-24

server/spell_effect.c: Some code cleanuip to cast_change_attr - mostly
    to combine the processing of the stat improving spells together.
    The actual change to playability is that bless and holy possession
    don't stack if cast multiple times.
server/spell_util.c: Modify create_aura so that player can't have more than
     one aura (of the same type) active at a time.
MSW 2003-03-20

server/apply.c: Change weapon improving code to only use up the number of
     potions that it needs, and not all on the ground.  Required adding
     another arg to eat_item() which is the number of items to consume.
include/sproto.h: Rebuilt for new eat_item() (actually, a static, so no
     longer shows up in this file)
server/attack.c: Change did_make_save to strip out magic attacktype when making
     saves for objects - otherwise, things like poison cloud destroy objects.
server/time.c: deal with player animations special in process_object - need to
     pass in the facing value, and not direction, since direction gets reset.
MSW 2003-03-19

common/anim.c: Pass direction to animate_object() - needed for player
    animations as player's facing may not match direction.
crossedit/Attr.c, server/main.c, server/time.c: Update calls to animate_object()
include/libproto.h: rebuilt
include/newserver.h, plugin_animator/animator_box.c, socket/init.c,
     socket/request.c: Remove newanim field from socket structure - not needed -
     how to animate is determined by object, not by socket.
server/move.c: Add check to P_OUT_OF_MAP in teleport function.
server/player.c: change move_player to call animate_object, so it gets full
    power of functionality it supports instead of 4 way hardcode animation
server/spell_effect.c: When altars are consecrated, don't look to arch name
    for first portion of name - always call them Altar of %s - fixes problem
    where altar is special god altar that has god's name in archetype, resulting
    in altar of .. of ...
MSW 2003-03-18

Patch for 64 bit experience total, as well as flexible number of levels.
Basically, max level is now dynamic, set in exp_table file.  Experience
is now a 64 bit value, so much higher totals now allowed.  To
allow for flexible levels, add new function - did_make_save() which is used
for players/monsters to see if they make their saving throw - this is
necessary because the savethrow[] array may not be as large as max level -
did_make_save takes this into account.
NOTE: If your updating a server, you will need to copy over/set up a
new exp_table file that has max_levels defined and at least one of the
tables uncommented.  There are no longer any compiled in defaults
configure, configure.ac: Add AC_CHECK_SIZEOF calls for long and long long
    so we can know which one to use for 64 bit support (other checks
    may need to be added)
common/exp.c: Remove levels table, replace it with a 64 bit pointer.
    Change init_experience to allocate appropriately sized table, have it
    read max_level value from exp_table file.  Replace atoi calls with
    atoll to get 64 bit value.  Update dump_experience to properly
    print 64 bit values.
common/info.c: Update dump routines that dump exp to properly print
    64 bit values.
common/init.c: Add initializing for settings.max_level value.
common/item.c: Update sprintf's to handle 64 bit output of exp (speed)
    value in objects.
common/living.c: change MAX_EXP define, update MAX_EXP_IN_OBJ define,
    add MAX_SAVE_LEVEL which corresponds to how large the savethrow
    table is.  Change MAXLEVEL to settings.max_level.  Change level_exp()
    to return 64 bit value, other updates in functions to use 64 bit
    values.  Add did_make_save() function.
common/loader.l, common/loader.c: Update load/save routins of exp to
    deal with 64 bit values.
common/map.c: Update calculate_difficulty to use 64 bit values when
    storing exp - unlikely to make a difference, since unlikely any map
    will get to a point where it has that much exp on it.
common/porting.c: Remove dead code from save_long(), add save_long_long()
    to save 64 bit values.
include/autoconf.h.in: SIZEOF_LONG and SIZEOF_LONG_LONG values added.
include/global.h: Add code to typedef sint64/uint64 types based on what
    type gives us those values.  Add max_level to settings array.
include/libproto.h: rebuilt.
include/living.h: Replace exp field with 64 bit value.
include/player.h: Update party kill log exp tracking to have 64 bit
lib/exp_table: Udpate comments about max_level, uncomment what
    was the default table so new installs have working table.
    Add 5 levels to all the tables.
random_maps/monster.c: Update place_monsters to use 64 bit when storing
    exp total for map/per square.
server/apply.c: Replace MAXLEVEL with settings.max_level, add
    did_make_save calls where appropriate
server/c_misc.c: have statistics command properly print 64 bit
    exp value.
server/c_wiz.c: Have stats command properly display 64 bit value.
server/hiscore.c: Replace exp values with 64 bit values, update to
    properly load/display them.
server/player.c: replace savethrow[] reference with did_make_save()
server/skill_util.c: Update skills command to properly show 64 bit exp values.
server/spell_effect.c: replace savethrow[] reference with did_make_save(),
    allow players to cast directors right beneath themselves, but other
    walls must be on empty space.
MSW 2003-03-07

Various bug fixes.
crossedit/Attr.c: Minor cleanup to eliminate some compile time warnings.
plugin/plugin_python.c: Remove some unused variables, thus fixing up some
     compiler warnings.
random_maps/random_map.c, random_maps/random_map.h, random_maps/special.c:
     Add MIN_RANDOM_MAP_SIZE values instead of hardcode constants.
server/monster.c: Fix communicate - odd bug can be map gets swapped out
     just after player is transferred to another map, causing crashes as
     map that was originally spoken on is no longer in memory.
server/rune.c: add missing free_object call when erasing runes.
server/skills.c: Change write_on_item to determine type of writing based
    on content of mesage, or lack thereof, and not the marked object.
    Fix problem of buf not being initalized.
MSW 2003-03-06

Various bug fixes.
Makefile.am, Makefile.in: Put crossedit as the last directory, so any build
    errors for crossedit doesn't effect anything else.
README: Update ftp site listing.
TODO: More things aded.
aclocal.m4, configure: Add missing / when checking in /usr/local for
    python headers.
common/map.c: Add some debugging in free_all_objects that checks to make sure
    there are not objects remaining that belong to the map just freed -
    only active if MANY_CORES is set.
random_maps/random_map.c: Increase minimum random map size to 10x10 - this
    is need for square spirals to work properly I think.
server/spell_effect.c: Have perceive self tell dragon players what they are
    currently focused on.  Fix town portal to remove force objects from
    players if destination is no longer available.
server/swap.c: Reset maps reset_time when loading them in in read_map_log() -
    this is only used if recycle temp maps is on.  Also, do sanity checking
    on reset_time value - bogus values were observed on metalforge.
socket/request.c: Update map timeout in draw_client_map() - in this way,
    we don't swap out a map within a players view only to swap it back
MSW 2003-03-01

gtk/win32/porting.c: tweaked SDL's sound support to use panning information.
    Added missing header files.
Ryo 2004-04-11

gtk/win32/porting.c: implemented basic sound with PlaySound.
gtk/win32/gtkclient.dsp: added winmm.lib to link list.
Ryo 2004-04-11

This is related to Win32 scripting. It now works correctly thanks
to archaios's patch. I tweaked it some, so if it doesn't work,
my mistake :)

common/metaserver.c: call 'script_killall' under Win32 when exiting.
common/script.c: some Win32-specific magic to make it work.
common/script.h: add Win32-specific function.
gtk/gtkproto.h: Win32-specific function.
gtk/gx11.c: call the scripting functions for Win32, not like other platforms.
Ryo 2004-04-04

common/metaserver.c: use 'draw_info' to report being unable to connect
    to metaserver. Also changed failure color from red to black, so it appears
    after the 'trying to connect' even in split window mode.
gtk/gx11.c: correctly refresh text windows so failure messages appear.
Ryo 2004-03-12

gtk/keys.c: Windows now uses default 'keys' file if player file not found for
    key loading.
Ryo 2004-03-04

configure.in: Remove checks for gnome libraries, since we no longer use
gnome/build a gnome client.
aclocal.m4: downgrade requirement for needed autoconf version.
MSW 2004-02-05

common/init.c: changed 'printf' to 'LOG' for HOME Win32-warning
Ryo 2004-02-01

common/image.c: fix stupid crashing mistake.
common/rcs-id.h: remove ; after #define
gtk/rcs-id.h: remove ; after #define
gtk/sound.c: #ifndef WIN32 for cfsndserv specific parts
Ryo 2004-01-30

all .c files:
all Makefile.in:
all rcs-id.h:
    Basic logging is now complete. All console messages sent by
    client are now sent to LOG(). All source files versions have
    are sent to LOG() at startup too (except for the still non
    compilable gnome client!). Gtk client can show the Logs in
    'Help -> Report a Bug' along with a small doc on how to bug report
Tchize 2004-01-30

    Have added a Documentation directory. It contains a first
    basic how-to related to client side scripting with two examples.
Tchize 2004-01-29

Those fixes are all Win32-specific, except the last one on keys.c
common/commands.c: Use correct Win32 function for closing socket.
common/image.c: Added missing headers, use correct mkdir syntax.
    Change a call to 'read', to be on the safe side.
common/misc.c: Added missing headers, use correct mkdir syntax, stub
    functions not yet ported.
common/player.c: Use correct Win32 function for closing socket.
gtk/gx11.c: Disabled bug window font setting, as GTK2 apparently doesn't
    use the same fonts. Use correct function for closing socket.
gtk/keys.c: Don't display 'Key unused' for left-alt & windows key
    (as they are often used to switch away from CF).
    Also fix a potential use of a variable not initialized (rare
    line corruption case)
Ryo 2004-01-29

common/client.c: Win32-specific fixes.
common/metaserver.c: small Win32 fixes, explicitely cast meta_sort
    in qsort.
gtk/config.c: Win32-specific fixes.
gtk/map.c: added Win32-specific  header.
Ryo 2004-01-27

common/item.c: check supplied argument to remove_item_inventory is
    not NULL.
Ryo 2004-01-25

gtk/map.c, gnome/map.c: Apply patch by kirschbaum@myrealbox.com which fixes
improper coordinate comparision.
gtk/gx11.c: Remove some unused declarations.
gtk/map.c: always set the cleared flag as spaces come into view.
MSW 2003-11-28

gtk/gx11.c: fixed invalid level display for skills under Win32
     (int64 issue, %lld doesn't work under Win32)
         Also removed dumb Win-newlines from previous commits.
Ryo 2003-11-22

common/client.h: readded (Win32 only) player's name. Used for specific
    key bindings file loading/saving.
common/script.c: made dummy functions to correctly compile under Win32.
    Actual implementation will come someday :)
Ryo 2003-11-10

x11/x11.c: Fix button pressing in the game window so it properly deals with
    non standard size maps.
MSW 2003-10-26

Those fixes are for Windows compilation ('for Windows' is implicit everywhere).
Most code was borrowed from Philip aka Somebdy's previous GTK port.
Note: the changed code is embedded in #if(n)def WIN32 / #endif.
Win32-Readme.txt: added to tell about supported clients under Windows.
common/client-types.h: Windows-specific typedefs.
common/client.c: missing include fixed, changed fcntl for ioctlsocket.
common/image.c: forced opening of files in binary mode to avoid bad troubles.
common/init.c: make sure HOME is set, to correctly find paths.
common/metaserver.c: made it work, with a specific function (fgets can't work).
common/newsocket.c: fix GetInt64_String. Make write_socket and 
SockList_ReadPacket work.
gtk/config.c: use correct header file
gtk/gx11.c: fix bad header files. Fix g_free() / free() issue. Catch player's name
     to load specific keys. Fix score display issue. Other specific stuff.
gtk/gx11.h: fix undefined X-Window specific type (Window).
gtk/image.c: fix headers.
gtk/keys.c: fix headers. Key file uses player's name, when known. Fix input
     issue with 'entrytext'. Fix missing KeyCode type.
gtk/map.c: fix headers.
gtk/png.c: fix headers.
gtk/win32: Windows specific files.

Ryo 2003-10-26

common/client.h, common/newsocket.c: Remove 'extern in errno' lines -
   errno.h is included, which takes care of the problem.
MSW 2003-10-25