Crossfire 1.3.0 has been released. There are numerous bug fixes in this, as well as improved item handling code (better item sorting with new client, as well as proper naming of plural objects). Files released for this version: sums (bsd) filename 17699 1332 crossfire-1.3.0-arch.tar.bz2 52744 1427 crossfire-1.3.0-arch.tar.gz 56236 2869 crossfire-1.3.0-maps.tar.bz2 58818 4186 crossfire-1.3.0-maps.tar.gz 37910 996 crossfire-1.3.0.doc.tar.gz 50029 2861 crossfire-1.3.0.tar.bz2 64559 3191 crossfire-1.3.0.tar.gz 61233 380 crossfire-client-1.3.0.tar.gz 27814 1276 crossfire-client-images-1.3.0.tar.gz Sums (md5) bb53582498faafc9a2ced8f6af6d861b crossfire-1.3.0-arch.tar.bz2 579072ebf6aa99536e7fdfcd435976a4 crossfire-1.3.0-arch.tar.gz 5308e236b390eb011c8f28bccb52df56 crossfire-1.3.0-maps.tar.bz2 632420953861ca96fc56d437a28da36a crossfire-1.3.0-maps.tar.gz a682581581b95989ed9f93bc15161e7d crossfire-1.3.0.doc.tar.gz 5a1702e1605bd032510ee3aabba87880 crossfire-1.3.0.tar.bz2 d1b4a00121b2a42d56c63c43a1c41de2 crossfire-1.3.0.tar.gz fc4c91bcd66c53e8da8ef13ab9554b04 crossfire-client-1.3.0.tar.gz d0115d1e429116a42080b48ea8cdfae3 crossfire-client-images-1.3.0.tar.gz crossfire-client-1.3.0 is the client (X11) distribution - standard X11 and gtk interfaces are provided. Improved object handling is now supported, and extension for future map handling has been added. crossfire-client-images.1.3.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/. crossfire-1.3.0.tar.{gz/bz2} contains the server code with prebuilt archetype and image files. crossfire-1.3.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-1.3.0-maps.tar.{gz/bz2} contains the maps. This is needed with the server distribution. crossfire-1.3.0.doc.tar.gz contains preformatted documentation. In this, you get the postscript spoiler and handbook, but you also get the html versions of both of those files with all the needed graphics - this is the only archive that has all the graphics pre-made. FOR FIRST TIME USERS: You will only need the appropriate server, map 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 Primary: ftp://ftp.sourceforge.net/pub/sourceforge/crossfire (64.28.67.101) Secondary: ftp://ftp.real-time.com/pub/games/crossfire ftp://ftp.cs.city.ac.uk/pub/games/crossfire/ ftp://ftp.cs.titech.ac.jp/pub/games/crossfire ftp://mirror.aarnet.edu.au/games/roguelike/crossfire/ ftp://crossfire.futt.org//pub/crossfire The initial upload of this release is only made to sourceforge - it should show up on the mirrors shortly. Mark Wedel mwedel at sonic.net Complete changelog: server: socket/request.c: If players were using the original map command with an even map size, server would try to send too much data to client - checking in server would result in an abort. Modify code to now properly send right number of spaces. lib/Makefile.in: remove extraneous / in front of motd entry in file list. include/version.h: Update for version 1.3.0 Makefile.in: Update for version 1.3.0 lib/archetypes: rebuilt. MSW 2002-07-01 doc updates: Rebuild the doc files, but most of this is fixing some of the doc build stuff to correctly working with the new image set naming scheme and fixing some bugs. Some doc is certainly out of date - the playbook doesn't mention the classes for example. doc/handbook.ps, doc/spoiler.ps: rebuilt Note: all the doc/playbook changes also apply to the same files in doc/playbook-html. doc/playbook/Makefile.in, doc/playbook/makeps, doc/playbook/makeps.pl: replace the awk makeps script with the perl one. doc/playbook/items-extract: Don't show invisible items. doc/playbook/levels-extract: Update so that it properly finds the declaration of the levels in living.c doc/playbook/treas1-extract: Clear type when we get a new Object header. was resulting in duplicate entries for the characters. doc/playbook/treas2-extract: Don't include forces of the no_class_face_change as part of characters treasures doc/playbook-html/chap1.html: Update ftp site information. doc/spoiler/Makefile.in, doc/spoiler/makeps.pl, doc/spoiler/makeps: replace the awk makeps script with the perl one. doc/spoiler/items-extract: Add a space after the name match so that it won't match on the name_pl field. doc/spoiler-html/items-extract: Add a space after the name match so that it won't match on the name_pl field. doc/spoiler-html/makeps.pl: Update to handle new naming scheme for images. doc/spoiler-html/spoiler.html: rebuilt. lib/Makefile.in: Fix error in variable not being surrounded by parens. MSW 2002-06-30 server/rune.c: Fix bug that allowed players to use marking runes to create arbitrary objects by embedding a endmsg in the string. MSW 2002-06-26 lib/ban_file: Update comments to describe how it actually works. server/commands.c: Add some time cost to shout, say, and tell commands. This prevents abusive players from issuing huge number of these commands. MSW 2002-06-20 doc/playbook-html/Makefile.in: Remove some superfluous blank lines in the file. configure, configure.in, plugin/Makefile.in: Modify configure script to subtitute PLUGIN_TARGET, have plugin/Makefile not build/install plugin if necessary support libraries are not in place. common/item.c, include/material.h: Move the declaration/initialization of materialtype from material.h to item.c server/main.c: Modify crypt_string so that on Freebsd systems, it will use des_crypt if available, if not, won't encrypt. MSW 2002-06-18 TODO: Additional updates. Add support for loading the EMERGENCY_.. locations from a .emergency file in the map directory. This makes it easy to switch map distributions without the need to recompile. The emergency information is now stored in the settings structure. common/init.c: add EMERGENCY_ defines to default values in setting. Add init_emergency_mappath which loads the information. include/config.h: Remove NEW_WORLD_MAP definition, as it is no longer needed. Update some of the EMERGENCY_.. information as we don't need to include the information for the new world map. include/global.h: Add emergency_.. fields to settings structure. server/login.c, server/main.c, server/player.c: Update references from the EMERGENCY.. values to settings.emergency values. MSW 2002-06-15 lib/Makefile.in: modified so that it doesn't overwrite commonly customized files (eg, motd, dm_file, ban_file). These files will get installed on new installations. MSW 2002-06-14 common/item.c: break out monster description into describe_monster function from describe_item - the later was a really long function. Reveal weapon speed for identified weapons, spell point regen penalty and max speed for identified armor - this was discussed about 6 weeks ago. Clean up the code to reduce the number of redundant if statements and otherwise confusing code in describe_item. MSW 2002-06-14 configure.in, configure, plugin/Makefile, plugin/Makefile.in, plugin/Makefile.old: Modify the plugin module to gets its needed information from configure. configure.in modified to look for Python.h and to find the python library. plugin/Makefile.in is a new file. plugin/Makefile.old is the old plugin/Makefile (removed) - may be useful for sites where configure does not work for some reason. The use of --with-includes=-I/usr/include/python2.2 (or the like) will likely be needed for configure to find the Python.h file. Note - if you are doing a CVS update, you will need to re-run configure with the appropriate options for this change to take effect. MSW 2002-06-13 server/main.c: If on freebsd system, don't crypt the password. Crypt on freebsd behaves diferently, and since there is little reason to encrypt passwords, easier to just leave them decrypted. Fix for sourceforge bug 469017 MSW 2002-06-13 More minor changes, including a fix for the disappearing object bug - this was caused by the flag_links not getting updated the last time new flags were added. Problem probably only showed up now because loader.c wasn't rebuilt until recent changes. -- common/loader.c, common/loader.l: add extern to arch_init, when loading and get an object from a file, complain and ignore it if arch_init is not set (only time we should get object (vs arch) for names is when we load the archetypes file). Add missing entries to flag_links array. common/treasure.c: Fix code so that proper plural names are generated for custom items (potions, flesh items, etc). include/define.h: Add note about updating flag_links when NUM_FLAGS is increased. server/skills.c: don't let players steal from players with FLAG_WIZ set. MSW 2002-06-09 Mostly bugfixes. I'm not sure if this will fix the disappearing arch problem- none of the changes made in the original multiple name would seem to cause it, so hard to say if any of these changes may fix it. -- common/arch.c: Change get_archetype_by_name to be more efficient and not leak memory. Modify code that frees all archetype data to free the name_pl information. Make sure the clone.name_pl is set to NULL. When singularites are created, set the name_pl for them. common/loader.l, common/loader.c: Modify code that fixes up name_pl to be more correct when it fixes up name_pl for old objects. common/map.c: Modify load_map_header so that tile_paths will be normalized - need for editor to be able to load maps that have a multipart object that spans the maps. crossedit/Edit.c: Modify some calls of out_of_map to OUT_OF_REAL_MAP, since tiling code really isn't fully in place for the editor. Modify EditPerformFill so that it actually works and doesn't crash the editor. include/global.h: Move FREE_AND_COPY macro from loader.l to here so that all source code files can use it. lib/adm/map_info: Modify to actually be able to examine just a sub portion of the map directories, and not all of them. Don't always show the unused objects - information isn't very interesting if only a portion is being examined. Modify the exit examining code to properly deal with random maps (if there is a finalmap component, make sure that does exist.) Loade the bmaps file and not the faces file to find valid faces. plugin/plugin_python.c: Add missing %s that described what script was actually loaded. random_maps/special.c, server/alchemy.c, server/c_misc.c, server/gods.c, server/login.c, server/player.c, server/spell_effect.c: Set up proper name_pl value for code that changes the name of objects. server/apply.c: Use FREE_AND_COPY to set up names. Set up proper name_pl values for cases that change name. In apply_lighter, call fix_player if player is lighting an object in his inventory - necessary for the players glow_radius to get updated so the change actually takes effect. socket/request.c: Modify esrv_map_scroll so that it properly clears cells that are moving out of view - failure to do this was resulting in the map1a updating these spaces with empty faces. This was causing fog of war wackiness with the client. MSW 2002-06-06 common/button.c: Fix mood floor code - before, it was changing the moods of all sorts of objects (luggage, itself, etc). Now, it only changes objects above the floor, and only monsters. MSW 2002-05-31 Main change is the addition of name_pl and client_type to object structure. The name_pl contains the proper plural name instance - fixes problem of '2 tooths'. client_type is sent to the client so that client doesn't need to figure out sorting on its own. Client_type is an object attribute, so can be modified in maps to hide the real type. -- common/arch.c: item_matched_string() modified to use the name_pl field when trying to match names, and not to try to make the name plural itself. common/item.c: query_short_name(),query_base_name() modified to use name_pl instead of trying to make the name plural. common/loader.c, common/loader.l: Add code to load and save the name_pl value and client_type. Add logic when object is finished loading to set name_pl value to same as name or arch name if no name_pl is specified - this supports old maps/characters in which the objects dont have a name_pl field yet. Disable logic for need_an and need_ie flags since they are no longer needed. Fix bug that caused elevation not to get saved. common/object.c: Add client_type check for CAN_MERGE function. Add appropriate logice in functions to handle setting, clearing, and copying of name_pl values. Remove unused anim_... fields initialization. doc/Developers/objects: Add information about the name_pl field and client_type. doc/Developers/protocol: Remove item protocol command info - it has been obsoleted. Add information about item2 protocol command. include/define.h: Remote ST1_* values - they were not being used. comment out FLAG_AN and FLAG_NEED_IE values. include/newserver.h: Add itemcmd to socket structure - this is the version of the item protocol command that will be sent to the client. include/object.h: Add name_pl and client_type field to object structure. Remove unused anim_* values. lib/archetypes: rebuilt with new archetypes that contain client_type and name_pl information. lib/bmaps, lib/bmaps.paths, lib/crossfire.1, lib/crossfire.0, lib/faces: rebuilt. server/monster.c: Remove anim_ references that were not being used. socket/init.c: Initialize itemcmd version in the socket to 1. socket/item.c: Remove special handling for clients of old versions - all clients now have to be at least sc_version 1024 (which has been around for a long time). This simplifies a lot of the object code that deals with sending or not sending plural names to the client - now always send them. Change code that sends item to client to use the item revision (currently 1 or 2) that the client wants. If version 2, send along client_type information. socket/request.c: Handle 'itemcmd' parameter in setup command. Make sure it is in proper range. If client is very old (sc_version < 1024) tell them so. MSW 2002-05-30 crossedit/png.c, crossedit/xutil.c: Increase size of temporary buffers that are used when loading images - necessary to allow the editor to run without crashing. include/newserver.h: Remove quick_pos from the MapCell structure. server/main.c: Add code to set the coordinates to the EMERGENCY_X/Y values if using the EMERGENCY_MAP. socket/request.c: Fix code that was causing darkness to get repeatedly sent for some spaces. MSW 2002-05-19 The bulk of this commit is to modify the server to only send the lower rightmost part of multipart archetypes that use the same head. This allows support of big images in the client. common/arch.c: Modify first_arch_pass to figure out the tail_x/y values for multipart archs. Rename the prev variable to head, as that it really what it is. Remove quick_pos info. common/object.c: remove quick_pos info from object. doc/Developers/images: Add notes about using merged images. doc/Developers/protocol: Add information about the map1a command, which is used to for big image support. Remove map2 documentation. include/map.h: Add MAP_LAYERS define instead of using hardcoded value of 3. include/newserver.h: Change the MapCell to use MAP_LAYERS - saves considerable memory. Add defines for MAX_CLIENT_ map sizes. Remove map1cmd, map2cmd elements from socket structure - instead use enumeration of mapmode - only one map type will be used at any time by the client, so no reason to have individual elements - it also makes it easier to add new mapmode commands. include/object.h: remove quick_pos, update_tag from object structure. Add tail_x, tail_y values to archetype structure. include/player.h: Remove some now unused values from the player structure (drawn, floor, floor2, darkmask). These have been superseded by the map cells in the socket structure for quite a while. include/sockproto.h: rebuilt server/player.c: Remove code that initialized the drawn values in the player structure since they no longer exist. socket/init.c: Replace map1cmd, map2cmd elements in socket structure with mapmode element. Modify init_ericserver so that it properly passes an int when setting the SO_REUSERADDR field. socket/request.c: Modify code in SetUp function to use the new mapmode enumeration in the socket structure. Add support for map1acmd setup option. Throughout map code, replace MAXMAPCELLFACES with MAP_LAYERS. modify map_clearcell to take options for values to clear the cell to. Add have_head, check_head, and update_space commands - used with the map1 command to store and find head information. draw_client_map1 modified to support map1a extensions, as well as added logic for checking for heads in blocked and out of viewable map spaces. Some of the code is simplified by using the update_space function, since the logic for processing each layer was otherwise the same. remove draw_client_map2 function. esrv_map_scroll has same logic - some variables and code formatting changes. MSW 2002-05-18 server/login.c, server/c_misc.c: Don't save characters with 0 experience. This apparantly fixes some abuses. MSW 2002-05-18 server/attack.c: Don't generate PLAYER_KILL_PLAYER messages if kill happened on battleground. Also, datestamp the messages. MSW 2002-05-13 server/attack.c: Generate log message when a player kills another player - include the ip address of the killer to make it easier to add them to ban files. MSW 2002-05-06 Client changes: Add support for the 'item2' command. This lets us get the item type from the server so that we don't need to figure it out for ourselves. Also, remove support for the 'item' command - that has long since been obseleted by the 'item1' command. -- common/client.c: Remove 'item' from dispatch table, add 'item2'. Add 'itemcmd 2' as part of setup command we send to server. common/commands.c: Add handling for response of 'itemcmd' setup command from server. Remove ItemCmd() function. Add type to calls to update_item(). Change Item1Cmd() function to be called common_item_command() since both item1 and item2 use almost exactly the same logic. Add Item1Cmd() and Item2Cmd() which just call common_item_command() common/item.c: Init item types to 'NO_ITEM_TYPE'. Remove get_nrof() as it was no longer being used. Add type argument to set_item_values() and update_item(). Simplify code in case of name handling, since we know that we will be using at least the 'itemcmd'. Don't worry about getting proper nrof for the player object - its nrof isn't really meaningful anyways. common/item.h: Add #define NO_ITEM_TYPE. Update type field in item to be 16 bits. common/proto.h: rebuilt. MSW 2002-05-30 The bulk of this checkin adds support in the client for the map1a protocol command and the display of big images properly in the map window. A lot of code cleanup was also done however, including removal for the support of the 'map' (original) command. The map1 has been in the server code for quite a while. TODO: Update what needs to be done for the x11 client. common/client.c: Remove map command, add map1a command to dispatch table. Modify setup we send to server to always try to use the map1a command - there is no reason not to use it. common/client.h: Change some of the CONFIG_ values - basically, change it so that there is just one entry for lighting configuration, but it can have any number of values. Modify MapCell so that instead of having multiple arrays for the different values (faces, sizes), add a MapCellLayer structure that contains the specific face information for that layer. Move the PlayerPosition struct and value to this function so that more of the map decompress logic can be handled in the common code. Remove count value from MapCell since it wasn't really being used. common/commands.c: Add code to set the use_config[CONFIG_CACHE] value based on what we get back from the server. Add code to check the setup response for the for the map1a and map1 options. Add code to deal with expanding big images into appropriate spaces. Move some functions from the gui portion to (display_map_clearcell, set_map_face). Add code for map1_common function to deal with map1a extensions. common/external.h: Remove display_map_clearcell and set_map_face from list of external functions. Add get_map_image_size function. common/init.c: change some values of the config values. Update initialization of config values for lighting. common/proto.h: rebuilt. gtk/config.c: Add new button for lighting - best per pixel. Modify code to properly deal with how lighting preference is now stored. Add legacy support for loading of per_tile_lighting and per_pixel_lighting values from config file. Add diagnostic of bad value if selected map/width is out of range. gtk/gtkproto.h: rebuilt. gtk/gx11.c: Change formatting of draw_list. Modify it so that it adjusts the column/row width based on the largest image it needs to display - In this way, if a player stands on a big building, the entire building is displayed in the look list. add row_height and column_width values so we only need to call the function to change them if they are in fact different. Add +sdl command line option to disable sdl code. Modify gtk_draw_map to include redraw parameter. gtk/gx11.h: remove PlayerPosition structure. add row_height, column_width elements to itemlist structure. gtk/image.c: Add table that is used to determine the scaling used for big images in the look list - in this way, big images still appear big, but not necessary 2 or 3 times bigger. Modify create_and_rescale_image_from_data to use this logic. Add get_map_image_size which the common code uses to determine the number of spaces an image may be. gtk/map.c: remove display_map_clearcell and set_map_face functions - now in common code. Modify the dump map/darkness routines to use the new format of the MapCell structure. Modify set_darkness to only set adjoining spaces for needing an update if lighting type is set that needs this. Remove display_map_addbelow - only used for 'map' command. Modify logic of fog of war code to have it done all at display time - not when setting/clearin g a cells contents. Modify gtk_draw_map - this basically follows the same logic of sdl_draw_map - it is now better optimized to only draw the spaces that have changed, and not the entire map - this should improve performance considerably. gtk/sdl.c: Remove #if 0 around putpixel - used for best lighting. Change indention of init_SDL - modify it so that if just_lightmap is true, that really is the only thing that is changed. Modify per_pixel_light code to use both methods of per pixel lighting depending on player prefernce. Modify sdl_gen_map to properly handle draw portion of big images. x11/png.c: Add get_map_image_size function. x11/x11.c: modify display_mapcell_pixmap to use new format of MapCell structure. Remove reference to count in MapCell structure. x11/x11.h: Remove PlayerPosition information - now in common code. x11/x11proto.h: rebuilt. x11/xutil.c: Remove display_map_clearcell and set_map_face functions. Modify du mp map code for new MapCell structure layout. Remove display_map_addbelow funtion.