Crossfire client 1.1.0 has been released. This is the gtk and X11 client. This version should woork with all current and past versions of the server. I know many people have had problems with the client crashing when connecting to servers based on CVS. Note that this release of the client only supports the PNG image format - you must have the png library installed to compile the client. You can get the client from http://prdownloads.sourceforge.net/crossfire/crossfire-client-1.1.0.tar.gz I imagine the mirror sites should pick it up soon. There are also lots of improvements: Fog of war (run with -fog): Tiles you saw previously but not currently in sight will be dimmed but still displayed. SDL support in the gtk client - using SDL is generally much faster on most systems. This should not be confused with the pure SDL client. Improved darkness handling (via command line or in program switches) - much better looking lighting effects can be achieved, including of actual dimming (and not pixeling), as well as per pixel interpolated lighting. Image resizing - you can specify the scale (either smaller or larger) for the map and inventory icons. Re-organization of the source making it more modular. Detailed list of changes: === Changes for 1.1.0: README: Update notes on needing png (and not xpm) library. Update mailing alias. configure.in, configure: As the seperate sound program (cfsndserv) is the only supported sound configuration, remove new_sound_system defines and ability to use the old (now non existant) sound system. Have configure exit with error message if png library is not found, as it is critical to the build process. Change it so that gnome/Makefile is always built so that making of releases works. gnome/gnome-cfclient.man, help/about.h, x11/cfclient.man: Update mail address. gtk/gtkproto.h, x11/x11proto.h: Rebuilt, prototypes for some changed for signed to unsigned characters. gtk/gx11.c, gtk/png.c, pixmaps/stipple.111, x11/png.c, x11/x11.c, x11/xutil.c, pixmaps/stipple.111 pixmaps/stipple.112: Mostly changes to fix compile warnings and make sure we are passing the right types to the various image creation functions (8 bit data). sound-src/Makefile.in: Add soundsdef.h to list of things to build. x11/x11.h: Remove extra semicolon. MSW 2001-12-28 common/config.h, gnome/gnome-cfclient.soundlist, sound-src/sounds, sound-src/soundsdef.h: Remove from CVS as it gets automatically generated as part of configure/build process. common/player.c, gtk/keys.c: Send valid count values when sending a fire command. Some spells use the count value (eg dimension door). gtk/gx11.c: Minor change to the trim_info_window code - still causes periodic crashes in the gtk code however. Modify style code so that if we don't get a valid style, we don't crash the client. MSW 2001-11-25 gtk/gx11.c: Made the inventory lists respect the user's GTK font settings, and made the various window parts use the font size to decide what size to make the displays and the window. TSB 2001-11-21 configure.in, configure: Modified so that if not compiling the gnome client, we don't create the gnome Makefile. MSW 2001-11-05 gtk/gcfclient.man: Add -timemapredraw documentation to man page. gtk/gx11.c: Update size of buffers to 100k, instead of 10k. Add some debugging information to when info window is trimmed. Add -timemapredraw command instead of it being a compile time option. gtk/gx11.h: Add extern for time_map_redraw. gtk/map.c,gtk/sdl.c: use time_map_redraw variable instead of define option. MSW 2001-11-04 gtk/gcfclient.man: Update man page to include all options supported by gtk client. gtk/gx11.c: remove some unused #defines. add -trim_info_window option which takes place of compile time option. Re-order command line switches to be in alphabetical order. Add support for client to load/save most all new options to the gdefaults file. gtk/map.c: Some refinements to fog of war so if a space is empty, don't mark it as a fog space to improve performance. Modify gdk draw routine so that it also supports fog of war. There is still some problem in that the client will really bog down in some circumstances when drawing the map. x11/Makefile.in: Add cfclient.man to list of files. MSW 2001-11-03 Complete client re-org. Create common, gtk, gnome, sounds, and x11 subdirs. Gtk client: only image support is png. Also add resizing options for the images (-mapscale/-iconscale), remove pngximage, update sdl image and normal draw image to support arbitrary image sizes. sound: Only support new sound system. MSW 2001-11-01 gx11.c: Modified to know about new pickup mode (frontend - most all the work is still done on the server). Patch by Nils Lohner. MSW 2001-08-28 Add reset_map_function into xutil.c that gets called after we lose a connection to the server. This fixes a problem of some leftover images from the previous session appearing in the map windows. MSW 2001-08-12 client.c: add call to reset_map_data proto.h: rebuilt xutil.c: Add reset_map_function (mostly a copy of reset_map), make some other functions 'static' so they don't show up in proto.h Fog of war code checkin. This is a fairly complex check in so hopefully not too much breaks. This adds the feature where tiles that have been seen but have since moved out of LOS are still shown on screen but with a 50% transparent black tile over it show it is no longer in LOS. Whatever was in that tile is still shown until a new update comes in from the server at which point the tile is cleared of all old info. The old way was to just paint an opaque black tile. To do this the client now keeps state of as many tiles as it can and remembers which tiles have been marked as cleared. This is a fair amount of memory so when -fog is not specified, the code reverts back to a much smaller in memory map. To allow this, the map structure is now dynamically allocated. I also had to add a new protocol command "newmap" so the client knows when to reinit its map state. NOTE: This feature only works when the client is using SDL. No reason the other blitters can't take advantage of it, just hasn't been done yet. client.c: fog_of_war global variable and newmap cmd added to CmdMapping Added "newmapcmd" to SetUp command. client.h: FOG_MAP_SIZE macro and Player_Position struct commands.c: handled "newmapcmd" sent from server, added NewmapCmd which just calls display_map_newmap(); gnome.c: stub function for display_map_newmap(); gx11.c: Modified all commands that take x,y coordinates to convert to the virtual coordinate system if fog_of_war is active. Added code to sdl_add_png_face to paint a fog_of_war cell over cleared but still in view tiles. Added handling of Control-shift-i to simulate a newmap cmd. Added -fog cmd line option. Added display_map_newmap() function that resets the virtual map state. Correctly deal with dynamically allocate map structure. proto.h: Added new prototypes by hand. x11.c: Added code to dynamically allocate map structure. Added stub function for display_map_newmap(); xutil.c: Modified functions to convert to virtual coordinate system when fog_of_war is active. Modified display_map_clearcell to not clear cell when fog_of_war is active, now just marks the tile as cleared. New function "allocate_map" to dynamically allocate a new map structure and setup the 2 dimensional array pointers correctly. New function, reset_map that clears out the map structure and resets to coordinate system if fog_of_war is active. Changed map_scroll to only update the virtual coordinates on scroll instead of moving memory around if fog_of_war is active. Also checks if the view is close to the edge of the virtual map and recenters it if so. SMACFIGGEN 2001-07-21 Speed optimization to the SDL rendering code. sdl_add_png_face now exits when all 5 dark[] array values are set to full bright. gx11.c: Added a line in the per_pixel lighting section that exits right away if all darkness values are set to 255. SMACFIGGEN 2001-06-23 Quick fix to the get_metaserver function. It was originally calling gtk_main_interation() in a while loop. This is really really really slooooow. I replaced it with a call to gtk_main(). gtk_main_quit for this invocation of gtk_main is called in enter_callback() when the user types in the metaserver he wants to play on. This is WAY faster then the old method. gx11.c: Changed get_main_interation to gtk_main in get_metaserver. Added call to gtk_main_quit() in enter_callback() when state changes from Metaserver_Select to Playing. SMACFIGGEN 2001-06-19 Fix for the sdl/pngximage clients where the client would draw stale data on blank squares after a mapscroll. Basically if you had say an image of a wall on the bottom of your screen and you walked down one tile. If the new tile on the bottom of the screen is now blank, the client would have drawn the wall again and you get a funky recursive effect. The fix is in the display_mapscroll function in xutil.c. xutil.c: Modifed display_mapscroll so that new cells just coming onto the screen would be marked as the_map.cells[ax][ay].need_update= 1. For cells that are already on screen and just moving, we still leave need_update= 0. SMACFIGGEN 2001-06-19 This checkin puts Scott MacFiggen's SDL support into the gtk client. I've made some enhancements to the code - it can now co-exist with the other image formats (so if all the libraries are available, you can choose from -xpm, vanilla -png, -png -pngximage or -sdl (which also forces -png). aclocal.m4, configure, configure.in: Add checks for SDL. client.man: Update with -sdl option. config.h, config.h.in: Add HAVE_SDL define gx11.c, xutil.c: Support for SDL drawing. A lot of the code in xutil.c is command with that of pngximage. gx11.c adds some additional options beyond just the drawing - per tile darkness and gridline options available under the client config window. MSW 2001-06-17 client.c,client.h: Add want_darkness global variable, include when in setup command we send server. client.man,gx11.c,x11.c: Update to include -darkness/-nodarkness command line options commands.c: Change handling of negative results from server on setup command. MSW 2001-06-16 The main thing this fixes is a major memory corruption problem when using -pngximage with the client. Better darkness display is also when using -pngximage, but it depends on a server change (the change basically lets the client do blending from completely dark spaces. ++ cconfig.h: add METASERVER define option which determines if client should try to contact metaserver or not (useful to turn off if behind a firewall so you don't have to wait for the timeout) client.c: add metaserver_on, map1cmd to global variables commands.c: divide by mapy value instead of 11 when using old map command - needed if playing with smaller maps. set map1cmd value on/off depending on type of map command we receive from server. gx11.c: Add BPP define for internal testing to see if using 4 bytes/pixel gives any speed of 3 (answer is performance is the same or slightly worse with 4bpp). when run with mapsize with x>15, create windows with bigmap outlook (message & stats above map, and not above/below). Fix bug in -mapsize processing which would set invalid sizes. Various cleanups to use image_size instead of 32. Changes in drawing to also use BPP define value instead of 3 is various areas. Optimizations for darkness rendering. Use map1cmd global variable to know the packing form instead of looking at map size. Improved darkness handling to know if adjoining spaces have valid darkness information instead of looking at number of tiles. metaserver.c: if metaserver_on isn't set, don't try to get metaserver information. png.c: remove end_ptr processing - wasn't getting used, so not allocating/ freeing it should improve performance a little. Also, move png_set_filler call to before calling png_read_update_info - this fixes a memory corruption problem. x11.c: use map1cmd for determine packing information in map, fix bug in -mapsize command processing which could result in invalid values being used. xutil.c: add have_darkness value to mapcell structure. Set value when we have valid darkness information for this space. This allows the client to use darkness for blocked spaces if the server provides it. update to use BPP instead of 3 for copies of image data. MSW 2001-06-12 This is actually a fairly big checkin: 1) add large map support into the client (use -mapsize option) 2) using GdkRgb structure for drawing the map. This prevents some more advanced map handling functions (like true alpha) as well as much better darkness support (use -pngximage option) cconfig.h: add TIME_MAP_REDRAW define. I originally used this to benchmark my improvements with the gdkrgb code, but throught it may be useful to others client.c: add map sizing global variables. Add map1 protocol pointer. request different mapsize of server. client.h: add map sizing variables to extern declarations. client.man: add description of -mapsize and -pngximage commands.c: Make it more forgiving about extra spaces in setu command. and support for mapsize option of setup command. Add option to map_doneupdate which controls if we want a full redraw or not. Add Map1Cmd command which handles map1 protocol command. gx11.c: Add support for big maps as well as gdkrgb backing images. Add support for -mapsize and -pngximage command line options. Lots of new image drawing code for pngximage. Add resize_map_window function which is called when new map size is negotiated with server - depending on new and old values, re-arrange some windows. png.c: add png_to_data function which takes the png image and and returns rgba data. used by pngximage code. x11.c Add big map support (-mapsize option). It otherewise lacks many of the other features I added to gx11.c xutil.c: add png_data to image structure, and have data put here when using pngximage mode. Move some of the basic map handling functions here - not the stuff that draws the map, but what sets up the server idea of wha the map looks like in terms of spaces. MSW 2001-06-04 The three main things this checkin does: Ability to save relative sizes of gtk subwindows, and have those restored when re-running the client. Use of the setup protocol command to set configuration values. Receipt of skill experience information, and display of that in the gtk client. ++ Makefile.in: Remove Protocol entry Protocol: Removed - now located in server/doc directory. client.c: Add value to determine if we want this option, initialize global array that maps the number to skill names. Add support for 'setup' protocol command. Send sound selection using new setup command. client.h: add MAX_SKILL to no max number of skills. And skill experience and level total to Stats structure, put extern for skill_names array and want_skill_exp value. commands.c: Add SetupCmd function which handles processing of 'setup' protocol command. If sound setting fails with setup command, fall back to old method. In StatsCmd, add code to get skill experience and level totals. gx11.c: Add ability to save window size and relative pane positions in non split mode, as well as loading and setting of those values (required moving pane information widgets from create_windows to global values) - while at it, renamed this to be more descriptive. Have client now display skill experience totals in stats window. metaserver.c: Make meta_sort a static function so that it does not get put into proto files. Its only used within the metaserver.c file in any case. newclient.h: Add CS_STAT_SKILL* values (to keep in sync with server version of this file) proto.h: automatic rebuild needed for SetupCmd function. MSW 2001-05-28 gx11.c: remove some unused code. Add color for cursed/magic items in the unlocked inventory pane (makes it easier to sort items picked up) Add support for trimming the info window buffers - now gtk just has to be fixed. Have the second information window do the seem freeze logic as the first. Fix problem of trying to access to many resistance labels (may fix some reliability problems). Remove -scrolllines command line option since the client does not use it. xutil.c: Don't load/save scrolllines line in config file when included with gx11.c - gtk client has no use for it. Add newline to error message about lines in default file we did not process. MSW 2001-05-25 client.c: update call to metaserver_show client.h: make meta_server, meta_port vars available to other files. gx11.c: clear echo hiding after user completes entry in text window. metaserver.c: Add parameter to metaserver_show which determines if we display instructions for selecting metaserver. Re-get metaserver information if user hits enter on metaserver selection. player.c: Add metaserver command that gets updated metaserver information. proto.h: rebuilt. MSW 2001-04-29 gx11.c: Add disconnect menu item and callback function to disconnect from server. player.c: Fix/improve firing logic. Was problem with gtk client in that it would stop firing after a little while when holding shift direction. This was because the outgoing command queue got filled up and never emptied because it still sent fire_stop commands. Add 'disconnect command to disconnect from server. MSW 2001-04-28 Makefile.in: Add gx11.c to depend directive, so it recompiles properly on changes to png.c, xutil.c command.c: clear no_echo instead of letting the graphic handler do this. also add call to x_set_echo - this fixes cases in nopopups mode of it not switching to echo things properly. gx11.c: Add nopopups/splitinfo options to configure menu. Add x_set_echo function, and remove detection of this from do_timeout. proto.h: automatic rebuild. x11.c: Add setup x_set_echo function. xutil.c: Add saving/loading of splitinfo and nopopups value to/from ~/.crossfire/gdefaults file. MSW 2001-04-27 Note: by default, the command history forward/back keys are not bound to anything. At least on Sparc/Solaris systems, the up key in the cluster of 4 arrow keys is the same keysym as the the key on the keypad, so by automatically binding these, you basically make it so the player can not move north/south, so I figure its better to let players bind them safely. gx11.c: Make the command completion key as well as history move backwards/ forwards custom settable by the player. Also, resize the width of the name/weight window for the look window the same way we do for the inv window. xutil.c: Add support for binding command completion and history scroll keys. Also, add support of loading/saving these bindings (As well as those for fire keys, run keys, command keys. MSW 2001-04-20 gx11.c: Have it hide password entered when using -nopopups mode. Add command completion with tab. remove some dead code. Add command history. Accessible through the up/down arrow keys (the 4 keys between the standard keys and the keypad, not the arrow keys on the keypad.) This feature is barely tested. Most of the editing functionality used here is what gtk provides. MSW 2001-04-20 client.c: add image_file declaration. Also, properly handle cases where the option given by -server (or config file) is not a valid server - go back to metaserver selection instead of looping infinitely. client.h: add image_file declaration. gx11.c: Lots of changes. remove duplicate code between this file and xutil.c. Add show_unlocked inventory tab selection. Add -nopopups command line option which prevents pop up windows. Also results in the count value getting cleared when used. Add -splitinfo command line option that results in two info (Text) windows - one for colored text, one for normal text. When resizing pane that has inventory listing, now updates inventory headings so weight keeps constant width so that the space for the name increases. Implement command_show options so that 'show' command will rotate through tabs (or goes directly to tab if right name is given) of inventory display options. Add handling for -pngfile option. player.c: add complete_command function that returns complete server command when partial string is passed to it (currently only used by x11.c) x11.c: Add unlocked inventory show option. Add command completion via tab key when entering an extended command. Add -pngfile support processing. xutil.c: Modified with #ifdef GDK_XUTIL so the gx11.c file can include this file to reduce duplicate code. Have cache code look in gfx directory first for images to load. Also have cache code then look at images loaded by -pngfile for match before looking in images previously download, then request image from server if we still don't have an image. MSW 2001-04-19 ===