Crossfire 0.96.0 has been released.  Despite many changes from the last release,
this release should be quite stable - its been tested fairly extensively.
Unless serious bugs are detected, this will likely be the last release before

Main changes:
New random map layouts added.
Re-done player exit code - this should hopefully fix players appearing in
    the middle of oceans.
Server will send image checksums to client when client is caching images -
    in this way, client knows to request new image or not (both client and
    server change)
New spells
PNG support added to editor.
Partial Resistance code added.  Protections now have numeric values,
   and add up.

A complete list of changes is at the bottom of this message.

NOTE TO MIRROR SITES:  The primary site ( has limited download
bandwidth per day.  If this poses a problem, you want a more reliable method,
or you just want a backup method. please drop me a mail message - I have set
up a secondary server off my ADSL link, but being that only has 128 kb
upstream bandwidth and is also used for other interactive purposes, I don't
want to make it available to all.

Files released for this version:

sums (bsd)  filename
04869  1507 crossfire-0.96.0.arch.tar.bz2
65381  1796 crossfire-0.96.0.arch.tar.gz
63394  2645 crossfire-0.96.0.maps.tar.bz2
12882  3807 crossfire-0.96.0.maps.tar.gz
11913  2641 crossfire-0.96.0.tar.bz2
60544  2967 crossfire-0.96.0.tar.gz
27062   237 crossfire-client-0.96.0.tar.gz

Sums (md5)
709ccf30ed6489dc3673b93be20b105b  crossfire-0.96.0.arch.tar.bz2
290f8cb22336459b2ac9f42a440954e9  crossfire-0.96.0.arch.tar.gz
b0b21296ba967e90388bce9b789a49ff  crossfire-0.96.0.maps.tar.bz2
76c6574c7fb50d3fe27dfc659f4c1be3  crossfire-0.96.0.maps.tar.gz
d29d939ccc7d0e02e14949e23f2109fb  crossfire-0.96.0.tar.bz2
cf42d4c6f2ef2595424a14a110a8bcbb  crossfire-0.96.0.tar.gz
2b6d9d9d6c355082a467805a301e7eb4  crossfire-client-0.96.0.tar.gz

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

crossfire-0.96.0.tar.{gz/bz2} contains the server code with prebuilt
archetype and image files. 

crossfire-0.96.0.arch.tar.{gz/bz2} contains the unpacked archetype changes.
This is not needed if you only want to compile the server and play the

crossfire-0.96.0-maps.tar.{gz/bz2} contains the maps.  This is needed 
with the server distribution.

No doc archive at this time - I don't believe anything in it should have
changed much.

FOR FIRST TIME USERS:  You will only need the appropriate server, map
and client file.  You do not need the arch file.  If you are a first time
user, you may want the doc file unless you are using a web based player

If you just want to play the game at some remote server, you need the client
and perhaps some version of the doc file.

Crossfire is avaible on the following ftp sites








I uploaded this version to just - it should be on the
other ftp sites in a short time.

Mark Wedel
     mwedel at



MSW 2001/02/02:
Protocol: Update with new face1 command that includes checksum.
client.c: add face1 protocol command.
client.h: Update version_sc to 1026.
commands.c: Move FaceCmd from gx11.c/x11.c to this file, since it
    now only does decoding of data and passes rendering off to appropriate
    file.  Also add Face1Cmd function that deals with checksum.  Both
    of these functions pass off the rendering to the same function.
gx11.c: add keepcache variable, re-do facing loading/caching - if
    we have local version of face, generate checksum of it and compare
    to that against what server has.  finish_face_command added to
    do this - called by the face functions in commands.c.  Add
    -keepcache command line option which will have it not request
    images from server if checksum is different.  Add usleep
    in metserver selection area to prevent client from hogging all the cpu
item.c: Add support for ^ in items file to say only match at start of
    line.  Useful for 'bolt' - doing substring also matched against firebolt.
item_types, item_types.h: make bolt ^bolt, add Head and hauberk to matching
proto.h: automatic regen.
x11.c: As gx11.c above, plus: Use one font for all windows - reduces
    complexity.  Add easy selection of font to use with -font command
    line option.
xutil.c: As gx11.c for relevant functions that are located in this file
    and not x11.c
End of MSW 2001/02/02 checkin.

MSW 2001/01/31:
client.c: Clear player inventory and look windows after disconnection
   from server.  Prevents client crashes.
gx11.c: various fixes - window placement no longer always centered on screen
   (very obnoxious if running xinerama), various prototypes fixed up,
   clear map data after clearing image data.
player.c: Add suport for 'mapredraw' command.  Not that this should ever
   really be needed, but the server supports it, so its nice to be able to
   use it.
x11.c: Fixes prototype/casting problems when clearing pixmaps.  Like gx11.c,
   clear map data.
xutil.c: add better description to the unbind command.

MSW 2001/1/13 (except as mentioned, all changes by MSW): Create destination dirs, remove extra tab.  Patch also by Dave.
Protocol: typo fixed.
config.h, Add HVAE_DMALLOC_H #ifdefs.  Checks currently
    disable in, as with it, the sound won't like properly since
    it needs -ldmalloc, and I haven't bothered investing that much time
    into fixing the Makefile.
gx11.c: Patches by Dave Peticolas - mostly code cleanup, but one new feature is
    support of wheel mice to move the scrollbars.
png.c: No real code change, just adjustments in some ordering which I think
    makes the code appear a little simpler.
x11.c: Minor code cleanups, some formatting changes, some to make better
    error messages.
End of MSW 2000/1/13 checkin.

MSW 2001/1/8:
client.h: Change damage type to be 16 bits.

MSW 2000/12/24:
png.c: Fix a major memory corruption issue - the png function
was re-allocing for a larger hunk of data, but did not update the
pointer and was still using the pointer to the smaller hunk.
Severity of this bug depended on luck - if the first png downloaded
happened to have the full 4 bytes/pixel, it never needed to do a realloc
so would work fine.  Otherwise, a matter of luck what data got stomped
over.  Also, modified the main function in this file so that it
you can compile against it and it now works with the new in memory
data read.

MSW 2000/12/19:
Metaserver update.  Most files updated.  This change has the client
connect the metaserver and lets the user choose which server to connect
to.  Also, if the client loses a connection (either because the player
has quit playing or the server died), the client will no longer exit and
instead go back to the server selection screen.
A few unrelated changes (cfclient):  when running cache, non downloaded
images should look better.  Also, client starts up with larger window in
Png mode to take into account the extra space png images takes up in the
game window.

Changes by file: Add metaserver.c file.
cconfig.h:  Add metaserver configuration information.
client.c: Add meta_ variables, move resists_name to this file, no longer
        have DoClient exit if it gets an error on the socket (instead
        mark the fd as -1 and return), change main loop such that if
        connection to server has been lost, go through loop to establish
        a new connection.
client.h: Add Metaserver_Select input state.  Change resists_name from
        a static to extern.
gx11.c:  Remove some unused code, various code cleanups, and additions to
        support the metaserver connection process.
init.c: Add reset_client_vars - call it between connections to servers.
proto.h: rebuilt for new functions.
x11.c: Update for metaserver connection status.  If running Png mode,
        have windows created larger.
xutil.c: When creating default images for cache, create 32x32 images for
        png mode, not 24x24 images.
metaserver.c: New file for metaserver code.
End MSW 2000/12/19 checkin.

MSW 2000/12/10:
png.c, gx11.c, x11.c, xutil.c: modified to use in memory loading of
png's.  This means that if not caching images, we don't need to write it out 
to a temp file.  This should result in a minor performance gain, but
also remove the need of using tmpnam.  Also, modified gx11.c so that
it uses same logic as the x11 client for extended command key (').
Before gx11.c client would use both ' and ", and there was no way to unbind
the later - since one can always bind the command key, I found that a bit

Updated to display resistance values in the message window.  Except for
armour, this is only displayed when running against serves with PR
code.  Change for both cfclient and gcfclient. Files affected:
Protocol client.h commands.c gx11.c newclient.h player.c
sounds soundsdef.h x11.c
MSW 12-3-2000


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
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 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

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

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

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/ 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/ 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
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.  

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
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

MSW 2000/12/10:
utils/ 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
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. configure Fix check for libdes to see if des_crypt
        exists in libdes before setting HAVE_LIBDES
crossedit/  Add Cnv/libCnv.a before LIBS - should fix
        linking error on irix systems.
utils/ modified so it ignores entries from hosts that 
        report their name as

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,, include/ 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/  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, changes, etc).
PR code also includes support to send protections to the client.
Files changed:
    common/ 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/
    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/
    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
    Added Files: