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 1.0. 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 (ftp.scruz.net) 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 game. 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 referance. 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 Primary: ftp://ftp.scruz.net:/users/mwedel/public (165.227.192.254) ftp://ftp.ifi.uio.no:/pub/crossfire (129.240.64.44) Secondary: ftp://ftp.real-time.com/pub/games/crossfire (206.10.252.12) ftp://ftp.cs.city.ac.uk:/pub/games/crossfire/ ftp://ftp.sunet.se:/pub/unix/games/crossfire (130.238.127.3) ftp://ftp.cs.titech.ac.jp:/pub/games/crossfire ftp://mirror.aarnet.edu.au/games/roguelike/crossfire/ ftp://crossfire.futt.org//pub/crossfire I uploaded this version to just ftp.scruz.net - it should be on the other ftp sites in a short time. Mark Wedel mwedel at scruz.net 01/28/2000 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Changes: Client: 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 time. 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 criteria. 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): Makefile.in: Create destination dirs, remove extra tab. Patch also by Dave. Protocol: typo fixed. config.h, config.h.in: Add HVAE_DMALLOC_H #ifdefs. Checks currently disable in configure.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: Makefile.in: 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 annoying. 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 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Server: MSW 2001/01/11: include/rproto.h: Rebuilt for new random map code. server/player.c: remove player insert in key_roll_stat - player is already inserted. server/swap.c: When swapping out map, see if it has already reached reset time, and if so, just delete it and not save it. In flush_old_maps, now have it check for maps that have no timeout set - this sometimes happens when players save/die on maps. MSW 2001/01/11: Other than various general cleanups, the main change this code does is that style maps (for random maps) get loaded special now - they objects they contain are not put on the active list, and they use a private map list so they do not appear in the output of the 'maps command. common/arch.c, common/treasure.c,server/login.c: Update calls to load_object common/loaderl.l,loader.c: Update lex_load to take an optional flags option. This is currently only used so that the loader can decide if it should call update_ob_speedto put objects on the active list or not. Calls to lex_load updated. load_object modified to take another option common.map.c: remove PROCESS_WHILE_LOADING and CHECK_ACTIVE_MAPS ifdefs. update calls to load_object. Remove some dead code. include/config.h: Remove CHECK_ACTIVE_MAPS and PROCESS_WHILE_LOADING flags. Those options did not work, and in all likelihood, this would be done via threading now days and not what code was there. include/libproto.h, sproto.h: updated or various function changes. include/map.h: Add MAP_STYLE flag. random_maps/exit.c: Call set_map_timeout after we load the final map so it will get swapped out. random_maps/standalone.c: Add dummy set_map_timeout function so it compiles. random_maps/style.c: Add load_style_map function which does the job of actually checking to see if a style map is in memory, and if not, loads it up. Updates the pointers so it appears on a map style map list and not the general map list. server/main.c: create set_map_timeout function that deals with setting the map timeouts. Fix bug so server doesn't crash if two players kill each other on hall of selection. server/monster.c remove dead code. socket/loop.c: If realloc fails, catch it and exit with meaningful error message. End of MSW 2001/02/11 checkin. MSW 2001/02/08: server/login.c:Fix that would prevent maps from getting swapped out properly - we would try to swap out a map the player is in the process of leaving - move swap out code until after we have moved the player to the new map. MSW 2001-02-08 MSW 2001/02/06: common/porting.c: relocate clean_path from this file to server/main.c server/main.c: relocate clean_path from porting.c. Add unclean_path. Modify enter_unique_exit so it supports relative maps on unique maps. Modify enter_exit so word of recall (or other forcelike fields), work when the return point is a swapped out unique map. MSW 2001/02/05: server/attack.c: Fix blind and paralyze - logic for reducing duration was broken, resulting in zero duration for most characters. It should now work properly, reducing according to the amount of protection. MSW 2001/02/02: common/item.c: Don't have armour item types get returned as magical if they have an armour value - that is to be expected. This eliminates the false positives that you otherwise get on armor when you cast detect magic. include/newserver/h: and checksum field to FaceInfo struct. Update version_sc to 1026. socket/init.c: calculate image checksums as we load the images. socket/request.c: If client is at least version_Sc 1026, use face1 protocol command that includes the checksum. MSW 2001/01/31: common/object.c: Fix that that spells cast on spaces with no floors get set properly after the spell expires. common/player.c: Use skill tools first (lockpicks, talismans, etc) before using native skills. In this way, an object with bonus automatically gets used. common/living.c: Fix so that negative con bonuses work properly - fixes bug where a higher con could result in lower total hp due to improper calculation. MSW 2001/01/30: Complete rewrite of the exit handling code. Hopefully as an effect, this will fix the player appearing in the middle of the oceans. I think the code should also work better in many other areas. Main enhancements is a 3x3 area for pets to follow player to new map, as well as golems now following players to the new maps. include/sproto.h, random_maps/rproto.h - rebuilt. random_maps/random_map.c: Change generate_random_map to take a structure with the random map paremeters. random_maps/reader.l, reader.c: Add set_random_map_variable function that reads the map parameters from a char buffer. Also, remove some leftover comments that were from the common/loader.l file. random_maps/rogue_layout.c: Change some functions to be static so make proto doesn't collect them. random_maps/standalone.c: Add opening of parms file into main function since it ws removed from the random_map.c file. server/apply.c: Don't display the message of random maps to the players as they enter them, as this message is random map parameters, and not a real message. server/login.c: #if 0 out using of the player loading element in the structure. this isn't used right now. server/main.c: Bulk of the changes. main changes are to break apart the old enter_exit function into smaller functions that more logically do the needed function (random maps, unique maps, and transferring the player to the new map). random map code now passes the parameters via structure instead of file in /tmp. Code is much more understandable now and hopefully bugfree. server/pets.c: minor changes/bugfixes. Search full SIZEOFFREE array, use real owner variable when print out messages. server/player.c: Remove usage of the loading variable in the player structure. End of MSW 2001/01/30 checking. MSW 2001/01/23: Various cleanups/fixes as detected by purify: common/anim.c: animation[0] was given a null pointer as the name, but bsearch/or comparison function will try to de-reference it. Give it a unique name. common/loader.l: msgbuf was being used initialized in the main loading function. loader.c also regenerated. common/object.c: find_free functions were not checking to see if the spaces they were examining were out of the map. Added checks to do so. server/apply.c: buf was being used uninitialized in the function. socket/init.c: input buffer needs to be initialized as we do a strncasecmp against the buffer which may not have any data in it. MSW 2001/01/18: server/skill_util.c: add change_skill_to_skill function to be used when we already know the skill object we want to use. This is more efficient than change_skill which takes a skill number and then searches the inventory for the object. remove extra esrv_send_item from do_skill_attack - don't need to send skills to player. do_skill_attack: remove call to hth_damage - that function does not take into account objects in the player inventory that increase damage, and since that is called each attack, it is not feasible to have it search the players inventory. Instead, we just rely on damage generated by fix_player - only think hth_damage did was adjust damage based on level difference. PeterM 2001/01/16 Added randomly-generated nethack-style maps to crossfire's random map generator. MSW 2001/01/15: Change blindness and paralyze so that duration is reduced based on protection the player has. file server/attack.c MSW 2001/01/15: Various fixes for friendly object code: common/button.c: Add missing call to remove_friendly_object common/friend.c: Pretty much completely re-written. add_friendly_object now checks to make sure the object being added isn't already on the list, remove_friendly_object will remove objects whose tags don't match, and added clean_friendly_list. common/object.c: No reason to use the function pointer to remove_friendly_object since that function is in the lib. common/time.c: Make DEBUG_TIME always on (no longer compile time option). other areas use the global var pticks, so if it was turned off, compile would break anyways. common/treasuer.c: No longer print debug messages on artifacts created. Cluttered log file making it hard to see more important errors. include/config.h: Remove DEBUG_TIME define. include/libproto.h: Rebuilt for clean_friendly_list function. server/main.c: rewrote do_specials to do things based on pticks variable. This allows various specials to be spread out across multiple ticks easier. Also, added clean_friendly_function to part of what this does. server/skills.c: add missing call to remove_friendly_object. Also, removed from #if 0 .. #else .. #endif code. End of MSW 2000/01/15 checkin. PeterM 2001/01/08: Wrathful Eye spell implemented. MSW 2000/12/26: Checkin of Jan's new god intervention code. I haven't played around with it much, but I haven't seen any really obvious problems. common/living.c: remove learn_prayer_chance common/treasure.c: Various changes to treasure generation - mostly to deal with starting equipment and putting it in the inventory. doc/crossfire.doc: Update docs on god intervention. include/define.h: GT_... flags removed. include/treasure.h: GT_... flags added. Addition flags added from what was in define.h before. lib/archetypes, lib/crossfire.png, lib/treasures: Updated with new archetypes and treasures. random_maps/standalone.c,server/rune.c,server/time.c: Calls to create_treasure updated server/apply.c: New functions for god intervention added, update calls to create_treasure, other god related changes. server/c_wiz.c: Calls to create_treasure updated, various functions to allow DM's to learn/unlearn spells added. server/commands.c: Various commands added to the wiz set of commands. See commen for c_wiz.c server/disease.c: Changes to reduce_symptoms server/gods.c: Numerous updates for god intervention code. server/player.c: Modifications for starting player equipment. server/skill_util.c: Display the god the character worships when they issue the skills command. server/skills.c: Minor cosmetic change made to message when praying on altar. server/spell_effect.c: Changes related to gods, cure spells, and generation of treasures & items. End of MSW 2000/12/26 checkin. MSW 2000/12/23: include/define.h: Add SIZEOFFREE1 and SIZEOFFREE2 values to use instead of arbitrary constants in the code. server/monster.c: change communicate function to use above values. Before it was stopping one short of the full 2 space array, so one particular space (-1, -2 relative to player) would not hear players speech. server/attack.c: Don't exit hit_player function if damage is reduced to 0 in magical attacks. This was preventing face of death and probably a lot of effect only spells from working. server/spell_util.c: modify check_cone_push to use move_object to blow the objects. Before, multisquare monsters were getting sliced into their individual components - move_object deals with multisquare objects properly. PeterM 2000/12/18: Re-add the conflict spell (various files) attack.c: fix a bug which could easily have led to seg fault, and did when I was testing under efence. MSW 2000/12/17: Various changes. Note that the scope of files in this checkin make it appear that a lot was changed, but in fact it was mostly just re-orginization - very little code has actually changed. include/autoconf.h.in: Add HAVE_LIBDES to file. include/config.h: Remove comments after defines for MAP_MIN/MAX timeouts. This just removes some warnings during compile. comments are now on lines by themselves. include/player.h: remove shootstrength for player structure. It was unused. server/Makefile.in: remove input.c file, add c_range.c file. server/c_chat.c: remove command_last, add command_shout and command_tell from input.c to this file. Also fix bug in command tell which would let players crash server at will. server/c_misc.c,server/c_object.c: Relocate many functions from input.c into these files. server/c_move.c, server/c_new.c: Add standard crossfire banner comment. server/c_range.c: New file - contains range related commands, including spell casting (relocated from input.c) server/c_wiz.c: move command_invisible from input.c into this file. server/commands.c: Remove unused commands (bell, last, strength) server/input.c: removed file. server/main.c: Change HAVE_DES_H to HAVE_LIBDES server/player.c: When choosing a race, draw it facing south for best presentation of image. server/spell_util.c: Remove dead code (#if 0 shootstrength related code) socket/loop.c: remove unused variables. NOTE: Due to the addition/removal of files, you will need to do 'config.status; make depend; make' from the top level directory for everything to be compiled properly. End of MSW 2000/12/17 checkin. PeterM: 2000/12/17: Various problems fixed in random_maps/*.c: endless loop removed, exit leading to blocked area of spiral fixed. PeterM: 2000/12/17: Stat max bug fixed. server/apply.c MSW 2000/12/16: server/player.c: If the player race archetype has a message, print that out. This allows a descriptive message about what the different races will get. The message is removed from the player once they decide on the race. common/living.c: Add some parens around some PR resistant checks - eliminates warnings from gcc. server/disease.c: have cure_disease remove all diseases a player is infected with. The code suggested it was attempting to do so, and the messages it printed out certainly suggested that the character was disease free. PeterM: 2000/12/14: Added spiral map layout PeterM: 2000/12/14: Restructuring of the random map code. Functionally, it should be identical. All global variables moved into the functions. MSW 2000/12/10: utils/metaserver.pl: Various improvements. Main one is that tcp connections to port 13326 of the metaserver will dump the information in a easily parsable format for the client or other applications. include/config.h: Set ARCHTABLE size to correct value. server/player.c: Have server send update item to client for players face while select class. Added esrv_new_player in Roll_Again, because without it, the client had yet to receive information on what tag the player was so could not make sense of the updated face. server/spell_effect.c: Balance issues for polymorph. Reduce maximum value for high valued objects, remove ability to polymorph generators, put maximum level on polymorphed monsters and give them saving throws against the effects. MSW 2000/12/5: server/player.c: Move location of where it sets the player has_hit variable until after we have confirmed that the player has actually attacked a monster and not that the space is blocked. Fixes various problems and make behaviour more predictable. common/button.c: Do not set path_attuned when loading connected objects from within the editor. This is normally done for random map code/glue logic. common/player.c: When trying to find a skill to use, use a native skill first before going off and returning a skill object like a talisman. MSW 2000/12/4: common/treasure.c: Make it so resistances from artifact files are absolute adjustments. Makefile.in configure configure.in: Fix check for libdes to see if des_crypt exists in libdes before setting HAVE_LIBDES crossedit/Makefile.in: Add Cnv/libCnv.a before LIBS - should fix linking error on irix systems. utils/metaserver.pl: modified so it ignores entries from hosts that report their name as put.your.hostname.here MSW 2000/12/3: crossedit/Attr.c: Add the new resist names to set of variables one can set. MSW 2000/12/3: Misc changes. Main one is adding PNG support to the editor. TODO: Remove outdated things to do (like partial resistance code) configure, configure.in, include/autoconf.h.in: Add check for libpng. include/global.h: Remove displaymodes - moved to crossedit/Defines.h crossedit/App.c, crossedit/App.h crossedit/CrEdit.c crossedit/CrFace.c crossedit/CrList.c crossedit/CrUtil.c crossedit/Edit.c crossedit/crossedit.c crossedit/xutil.c, crossedit/png.c (new file): Add support for png display in crossedit. crossedit/Makefile.in: Add png.c file. server/c_misc.c: Change who command to only display real players, and not players in process of connecting/unconnecting. Also, remove code to display old sockets, since those are not supported anymore. MSW 2000/12/3: Checking for partial resistance code. Various minor errors also fixed (compiler warnings, unused variables, Makefile.in changes, etc). PR code also includes support to send protections to the client. Files changed: common/Makefile.in common/button.c common/exp.c common/friend.c common/holy.c common/info.c common/init.c common/item.c common/living.c common/loader.c common/loader.l common/object.c common/player.c common/re-cmp.c common/readable.c common/treasure.c crossedit/App.c crossedit/crossedit.c crossedit/proto.h doc/crossfire.doc include/define.h include/global.h include/libproto.h include/newclient.h include/newserver.h include/object.h include/player.h include/sproto.h lib/Makefile.in lib/archetypes lib/artifacts lib/crossfire.png lib/crossfire.xbm lib/crossfire.xpm random_maps/rproto.h random_maps/special.c random_maps/style.c server/Makefile.in server/apply.c server/attack.c server/c_misc.c server/c_object.c server/commands.c server/disease.c server/gods.c server/input.c server/monster.c server/player.c server/resurrection.c server/rune.c server/spell_effect.c server/spell_util.c server/swap.c socket/metaserver.c socket/request.c Added Files: include/attack.h