Crossfire 0.95.8 has been released.  This release is mainly done to get
a snapshot before the partial resistance code gets done.  It should be
fairly stable, but may not be as stable as some previous releases, but
there have been a lot of bugfixes.  A list of changes will be enclosed
at the end of this file.  Probably the most notable change is the addition
of a race & class system.

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
59174  1439 crossfire-0.95.8.arch.tar.bz2
64640  1735 crossfire-0.95.8.arch.tar.gz
01363  2525 crossfire-0.95.8.maps.tar.bz2
50665  3617 crossfire-0.95.8.maps.tar.gz
58891  2562 crossfire-0.95.8.tar.bz2
58127  2879 crossfire-0.95.8.tar.gz
25088   231 crossfire-client-0.95.8.tar.gz

Sums (md5)
6c2ef4c81357d610229e1fe446000d65  crossfire-0.95.8.arch.tar.bz2
742a19b2d3333057b5d59c1ac3afc2c8  crossfire-0.95.8.arch.tar.gz
954bcfaaf7c7e8a54b9fc17f50ab06c1  crossfire-0.95.8.maps.tar.bz2
f47b8aaa3757056ba3cebca6a571d50e  crossfire-0.95.8.maps.tar.gz
7c7714f1504b8d7b7055afe7da5c49ee  crossfire-0.95.8.tar.bz2
3dbc96ff9d63bc36f0316a79e1ac448c  crossfire-0.95.8.tar.gz
2123f9d30f999f6ef64183890cbf23d0  crossfire-client-0.95.8.tar.gz

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

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

crossfire-0.95.8.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.95.8-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.

If you are looking for a windows/NT client, look at:
for a file called (XXXX are numbers representing the version -
get the latest)

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


item.h:  Update NAME_LEN to 128, as the server may send us names that
long.  Also, terminate the name after we copy it.
Remove remaining font support for x11 client.
Allow setting default display mode and server to connect to in the
cconfig.h file.

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

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

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

include/sproto.h:  Removed prototype of obsolete make_gravestone()
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:
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.

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 playe

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

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.

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

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.