Changes in top level CVS tree. A few notes when putting entries in this file: 1) Please include a date in the form yyyy/mm/dd (yes, us americans are screwed up relative to most the world, but some consistent date format is needed for this file.) 2) You don't need to go into exacting detail of the changes. This file is mostly meant to give an idea to others what has changed - you don't need to recreate the code here. If you change fixes a reported bug on the mailing list, please provide a brief description of the bug fixed. But please do try to include a useful description of what changed. Saying something like 'General cleanup - just whitespace changes' is much more useful than 'misc edits' or 'code cleanup'. 3) Please include your name with the changes you make. 4) Whenever making an update, please update this file, no matter how small - this just lets others know that the file has changed if nothing else. With this, include the file(s) that you changed. ------------------------------------------------------------------------------ Changes for CVS: lib/collect.pl.in: Fix generation of 'editor_folder' field. It did not work too well for .arc files in deep subdirs. lib/{archetypes,bmaps.paths,crossfire.0}: Rebuilt. Andreas Kirschbaum 2006-02-21 random_maps/random_map.c: Cause the random map generator to skip certain elements if the style is set to "none". doc/Developers/random-maps: Document above change Alex Schultz 2006-02-20 socket/request.c: Don't crash on trying to send a spell which doesn't have an associated skill Brendan Lally 2006-02-20 Do not allow to dimension door into monsters or earthwalls. --- server/spell_effect.c: In dimension_door() do not allow destinations that are P_IS_ALIVE. Andreas Kirschbaum 2006-02-19 random_maps/style.c: In find_style() fix access to uninitialized variable. Andreas Kirschbaum 2006-02-19 Prevent crossedit from stripping out 'maplore' map header field. --- common/map.c: Add code to load/save/dump maplore information. include/map.h: Add new maplore field to map struct. Andreas Kirschbaum 2006-02-19 Apply patch #1433271 (code-cleanup) by Stefan Huehner: Add const and static. --- Affected files: common/{loader.l,los.c,map.c}, include/{libproto.h,sproto.h}, plugins/cfanim/{cfanim.c,include/cfanim.h}, server/{apply.c,skill_util.c} common/loader.c: Rebuilt. Andreas Kirschbaum 2006-02-17 common/map.c: Modify ob_blocked() to properly handly objects with a 0 ob->move_type. Fixes infinite loop from random map code when trying to place exits. MSW 2006-02-16 Commit forgotten file for yesterday, which have the CFAPI_INT16 define... include/plugin.h server/plugins.c Ryo 2006-02-15 Minor bugfixes: server/apply.c: Fix apply_transport ->contr checks to actually check against correct values. server/plugins.c: Replace CFAPI_INT16 with CFAPI_INT - there is no declaration anyplace for CFAPI_INT16 so compiles fails. server/swamp.c: Fix swamp code so that only objects that can be picked up disappear - this way, transports don't disappear into oblivion. MSW 2006-02-15 Swamps don't affect DMs anymore. Also, swamps don't remove items with FLAG_IS_FLOOR or FLAG_IS_OVERLAY_FLOOR. server/swamp.c ---- Fixes to plugin system. Added "SINT16" as return type. server/plugins.c: resistances are sint16, not int. plugins/cfanim/include/cfanim_proto.h: fix cf_object_get_resistance declaration. plugins/cfpython/cfpython_archetype.c: fix comparison function, which should return 0 or +-1. plugins/cfpython/cfpython_map.c: fix comparison function. plugins/cfpython/cfpython_object.c: fix broken GetResist, fix comparison function. plugins/cfpython/cfpython_party.c: fix comparison function. plugins/cfpython/cfpython_region.c: fix comparison function. plugins/common/plugin_common.c: object resistances are sint16. plugins/common/include/plugin_common.h: object resistances are sint16. Ryo 2006-02-14 Apply modified patch #1428048 (make the log line buffered) by Marc Lehmann. --- common/init.c: In init_globals() switch the log file to line buffer mode. Andreas Kirschbaum 2006-02-11 server/apply.c: In apply_scroll() do not identify the scroll if the player lacks the literacy skill. Andreas Kirschbaum 2006-02-10 Apply slightly modified patch #1428309 (code-cleanup: const, static) by Stefan Huehner: add const/static to functions/variables. Remove some type casts. --- Affected files: common/{arch.c,glue.c,image.c,init.c,readable.c,time.c}, crossedit/stubs.c include/{attack.h,libproto.h,object.h,sockproto.h,spells.h,sproto.h}, random_maps/{door.c,rproto.h,standalone.c,style.c}, server/{alchemy.c,apply.c,c_chat.c,c_misc.c,init.c,player.c,shop.c,spell_effect.c}, socket/{info.c,loop.c,request.c} Andreas Kirschbaum 2006-02-10 server/c_wiz.c: make dm stats command print Int and damage. Rearrange output to match the stat ordering. lib/wizhelp/stats: document the stats command lib/Makefile.am lib/Makefile.in: install the new help file Brendan Lally 2006-02-10 Apply modified patch by Pippijn van Steenhoven to fix get_rangevector functions on tiled maps. --- server/map.c: Add helper function adjacent_map() to check if two maps are adjacent. Modify get_rangevector(), get_rangevector_from_mapcoord(), and on_same_map() to use this function. Andreas Kirschbaum 2006-02-09 server/player.c: make a player's starting items be locked, so that they can't accidentally drop and lose them without unlocking them first. Brendan Lally 2006-02-09 Apply patch #1427979 (code-cleanup: add const, fix warnings) by Stefan Huehner. --- common/{anim.c,button.c,exp.c,friend.c,image.c,item.c,living.c,los.c,map.c, object.c,player.c,quest.c,readable.c,recipe.c,region.c,treasure.c,utils.c}, include/libproto.h: Add "const" to pointer function parameters. Andreas Kirschbaum 2006-02-09 Make create food spell work for all FOOD/DRINK objects. It used to fail for objects where another object with the same name but type POISON does exist. --- common/arch.c: Add new function find_archetype_by_object_type_name() to find an archetype by item type and item name. include/libproto.h: Add new prototype. server/spell_effect.c: In cast_create_food() only search for objects of type FOOD or DRINK. Andreas Kirschbaum 2006-02-09 Added a "insert_into" command for DMs, to easily put items in other items. Modified filse: include/sproto.h server/c_wiz.c server/commands.c Ryo 2006-02-08 server/main.c: Modify enter_exit() to see if player is in a transport, and if so, remove him. Can happen if player uses word of recall while in a transport. MSW 2006-02-07 Regional jails. --- common/region.c, include/libproto.h, map.h: parse jail entries, new function get_jail_exit to return the exit to the local jail. doc/Developers/regions: update server/c_wiz.c, commands.c, include/sproto.h: add dm command, command_arrest to jail players in the correct location. lib/regions: add scorn and navar jails. Brendan Lally 2006/02/08 Code that adds transports. Transports are described more in detail in docs/Developers/objects. --- loader.l: Add new move type ('boat'). Update move_name field to be aware of this type. common/object.c: Unrelated to transport, but more apparant with transports - fix bug with insert_ob_in_map() and multipart objects - we now only try to fix up map and coordinates if the provided coordinates are out of the map. Before, function would always use the passed map for multipart objects, which is incorrect if we have already set valid coordinates. doc/Developers/objects: Update notes for TRANSPORTS. Update move information to include MOVE_BOAT. include/define.h: Add type TRANSPORT. Add MOVE_BOAT. include/player.h: Add transport field to player structure. include/sproto.h: rebuilt. server/apply.c: Add code to handle applying of transports. Update apply_below to apply transport if player is on one. server/attack.c: Update hit_map() to look for transports, and hit any players with the damage. server/c_object.c: Update put_object_in_sack() to also handle TRANSPORTS so that code can be re-used. server/move.c: Fix handling of multipart objects in move_object() - old code didn't work right with multipart objects moving along seams of tiled maps. Add code to move_ob() to update player map position for all players in a moving transport. server/player.c: Update move_player_attack() too check of player is in tranport, and use that for map and location information. Update move_player() to handle speed related issues with transports. server/time.c: Add code to credit time back to TRANSPORT objects since we remove time in move_player() for TRANSPORTS. socket/item.c: Add add_object_to_socklist() so that same code isn't reproduced in 3 different places in the file. Update draw_look() to handle transports - send transport object itself, then objects in transport. Update esrv_send_inventory() and esrv_send_item() to use add_object_to_socklist(). Update esrv_get_ob_from_count() to look for objects in transport if player is in transport. socket/loop.c: Remove checking of pl->map status, since draw_client_map() does that, and we need to handle if the player is in a transport. socket/request.c: Handle map drawing if player is in a transport. MSW 2006-02-06 movement type changes. Add move_allow field to explicitly allow certain movement types on spaces. Add suppport for using string names instead of numeric values to specify the MOVE_ values. Add code so when saving data out, use string names instead of numeric value. --- common/loader.l: Remove save_double(), as it isn't used by any code. Add set_move() to set movement types from strings. Add get_string_move_type, which takes integer movement type and returns a string. Update load and save code to use these functions respectively. common/map.c: Change blocked_link() so that we only examine all the objects on a space if there is something alive on the space or space is otherwise blocked. There is no reason to examine all the objects on the space if the object in question can move onto it. Modify update_position() to use the move_allow field to clear bits in the move_block field. common/object.c: Add check in CAN_MERGE for move_allow. Add check for move_allow in update_object to see if we should update the space or not. doc/Developers/objects: Update Movement code section to note use of using strings to set movement types. Add note about move_allow. Section about Transports added, but code isn't there yet. include/object.h: Add move_allow to object structure. MSW 2006-02-04 Fix attack messages containing random characters. -- server/attack.c: In attack_message() always initialize variables. Andreas Kirschbaum 2006-02-03 server/c_misc.c: fix bug 1413239 Server crash with "who" command output using null map names Brendan Lally 2006-02-03 include/newserver.h, server/login.c, socket/init.c, socket/loop.c: drop any connection that fails to login successfully after MAX_PASSWORD_FAILURES attempts (defaults to 5) doc/Developers/protocol: document properly the byte counts of item flags, and include documentation of the itemcmd setup option. Brendan Lally 2006-01-30 Custom commands-related fixes. plugins/cfpython/cfpython.c: fix custom command handling. server/plugins.c: try all plugins for custom commands. ----- Moved the global event 'LOGOUT' from when player actually disconnects to when player logs out and is asked whether to play again or not. Modified files: server/apply.c main.c Ryo 2006-01-15 socket/request.c: In ReplyCmd() make sure the reply does not cause a buffer overflow. Andreas Kirschbaum 2006-01-13 socket/request.c: add some better checks in addspell packet formation, fix a crash bug. Brendan Lally 2006-01-13 server/c_object.c: stop rename crashing if there is no name to rename to when object is passed by number -- server/c_object.c: allow the rename command to take tag of the item to be renamed, so that clients can form rename commands properly. Brendan Lally 2006-01-11 server/c_range.c: allow spells cast by number to also have options passed to them Changelog: Commit the changelog entry for the last commit. Brendan Lally 2006-01-10 Spell listing support: allow 'spell_paths' to be sent to requestinfo, reply with number:path change return type of SP_level_spellpoint_cost to sint16 add spellmon as a setup value, if it is set; send path attunement/repulsion/denial in stats send data about spells in addspell packets send updates to that data Affected files: common/living.c crossedit/stubs.c doc/Developers/protocol include/funcpoint.h, newclient.h, newserver.h, player.h, sockproto.h, sproto.h random_maps/standalone.c server/apply.c, login.c, spell_util.c, init.c, loop.c, request.c -- server/c_range.c: allow cast/invoke and prepare commands to take item tags as well as spell names Brendan Lally 2006-01-09 Apply modified patch #1396303 (add setting to disable stealing from players) by Terry Brown. It adds a new option "no_player_stealing" to the settings file. If set, it prevents players from stealing from other players. It defaults to ON. -- doc/settings: Add documentation for new setting. include/global.h: Add new field to settings structure. lib/settings: Add new option no_player_stealing. server/init.c: In load_settings() recognizes the new option. server/skills.c: In attempt_steal() prevent stealing from PLAYER if option is set. Andreas Kirschbaum 2006-01-08 include/newserver.h, socket/{init.c,request.c}: Remove unused fields ext2 and ext_title_flag from NewSocket structure. server/skills.c: Fix/improve feedback messages for stealing skill. plugins/cfpython/cfpython.c, server/plugins.c: Just whitespace changes to make it conform to programming_guide. plugins/cfpython/cfpython.c: Make sure context->options always is initialized. server/main.c: Make code more readable; use snprintf where appropriate. crossedit/Cnv/CnvPrompt.c: Make file compilable with Ansi C89 compiler. Andreas Kirschbaum 2006-01-08 Global event Python scripts now are in subdirectories. This makes it easier to distribute "Python packages". Modified file: plugins/cfpython/cfpython.c Ryo 2006-01-07 common/{item.c,treasure.c}, server/{apply.c,gods.c,spell_effect.c}: Use named constants instead of numbers. server/monster.c: Use correct field name in move_monster(). Andreas Kirschbaum 2006-01-07 Summon pets less often to the owner on tiled maps. -- server/pets.c: In remove_all_pets() and pet_move() use on_same_map() to check whether the pet is too far away. Andreas Kirschbaum 2006-01-07 Change meaning of "items are on same map": for tiled maps now two objects are also considered to be on the same map if they are on diagonally adjacent maps. This solves the issue that a pet can be only one tile away from the owner but still considered not to be on the same map. -- common/map.c: In on_same_map() also consider diagonally adjacent maps. Andreas Kirschbaum 2006-01-07 Added regions support for plugins. Affected files: include/plugin.h sproto.h server/plugins.c -- Added regions to Python plugin. Affected files: cfpython/include/cfpython.h cfpython_map_private.h cfpython/cfpython.c cfpython_map.c cfpython_region.c Makefile.am Makefile.in New files: cfpython/include/cfpython_region.h cfpython_region_private.h cfpython/cfpython_region.c -- In Python's Object, Archetype is now a property and not a method. Affected files: cfpython/include/cfpython_object_private.h cfpython/cfpython_object.c -- Cleaned obsolete include/plugproto.h. Ryo 2006-01-07 Make teleporters hidden below the floor work again. -- server/time.c: In move_teleporter() use object above floor instead above teleporter to operate one. Andreas Kirschbaum 2006-01-07 Fix issues with map tiling. -- server/move.c: In move_ob() make sure inserting multi-part objects into tiled maps work. server/spell_attack.c: In cast_cone() insert spell effect at correct position for tiled maps. Andreas Kirschbaum 2006-01-07 common/map.c: Allow map tiling paths to be reletive. server/main.c: Template maps: Impliment using fixed maps as templates, and improve reletive path support for them. Alex Schultz 2006-01-06 Make SIGNs (including Magic Mouths) trigger for DMs again. Does not reduce the counter if in 'wizpass mode. -- server/apply.c: In apply_sign() ignore DMs. Andreas Kirschbaum 2006-01-04 server/spell_effect.c: Apply patch 1394861 - fixes magic walls. In conjuction with archetype changes, look at the spell object (and not created wall) to see if it blocks. server/c_chat.c: Apply patch 1389113 - orcknuckle messages appear in same window. MSW 2006-01-01 Prefer marked item when throwing objects. -- server/skills.c: In find_throw_ob() prefer marked item. Andreas Kirschbaum 2006-01-01 Make EXITs affect DM players again. -- common/object.c: In check_move_on() ignore only slow movement penalties for DMs. server/apply.c: In move_apply() ignore anything but EXITs for DM players. Andreas Kirschbaum 2006-01-01 Make forked lightning correctly traverse tiled maps. -- server/spell_attack.c: In forklightning() insert forked part into correct map. Andreas Kirschbaum 2006-01-01 Properly unready forgotten spells. Prevents crashing the server if casting a forgotten spell. -- include/sproto.h: Add new prototype. server/{apply.c,gods.c}: Call player_remove_range_ob() when forgetting a spell. server/player.c: Add player_remove_range_ob() to unready a given object. Andreas Kirschbaum 2006-01-01 Improve the commands learn_spell and forget_spell: now these commands accept partial spell names and print sensible error messages if they fail. -- include/sproto.h: Remove prototype for now static function. lib/wizhelp/{forget_spell,learn_special_prayer,learn_spell}: Update help files. server/c_wiz.c: Add parameter op to get_spell_by_name() for printing error messages to op. Allow partial matches for spell name. In command_learn_spell_or_prayer() and command_forget_spell() report an error to the player instead of an error message to the server log file. Andreas Kirschbaum 2006-01-01 Fix reference-related crashes. plugins/cfpython/cfpython.c Ryo 2006-01-01 Apply modified patch #1391648 (FIX: new movement code and generators) by Lalo Martins. This fixes bugs #1383398, #1383392, #1375643, #1372035, #1370409; all bugs are related to objects stacking which should not stack. -- common/map.c: In ob_blocked() consider tiles with living objects as blocked. Andreas Kirschbaum 2005-12-31 Don't print "file not found" for global events. plugins/cfpython/cfpython.c Ryo 2005-12-31 Changed the way Python scripts are called. Now script don't share variables anymore. Fix a memory leak. plugins/cfpython/cfpython.c Ryo 2005-12-28 Applied patch #1383359 (Fix death message) courtesy Anton Oussik ( https://sourceforge.net/tracker/index.php?func=detail&aid=1383359&group_id=13833&atid=313833 ) server/attack.c Ryo 2005-12-27 server/skills.c: In steal() do not give exp for stealing from pets since this can be exploited to gain exp over and over. Andreas Kirschbaum 2005-12-23 server/c_party.c: fix crash with party obsolescence (->next on freed item). Added get_firstparty() to get firstparty private var needed for plugin. ------- Added party information to plugin functions. Plugins can change player's party or marked item. New files: plugins/cfpython/include/cfpython_party.h cfpython_party_private.h plugins/cfpython/cfpython_party.c Modified files: include/sproto.h: add new functions prototypes. include/plugin.h: party-related defines plugins/common/include/plugin_common.h: new party functions. plugins/common/plugin_common.c: new party functions. plugins/cfpython/include/cfpython.h: add new include. plugins/cfpython/include/cfpython_object_private.h: marked item/party getter/setter. plugins/cfpython/cfpython.c: add GetParties to Crossfire module. plugins/cfpython/cfpython_object.c: MarkedItem setter, Party getter/setter. server/plugins.c: new callbacks for party, marked item setter. Ryo 2005-12-17 server/attack.c: Make spells destroy objects again. Andreas Kirschbaum 2005-12-15 Moved natural dragon skin resistances from "statistics" to "resistances". server/c_misc.c Ryo 2005-12-13 Fix Windows compilation after Andreas's changes. include/win32.h: define WIFEXITED and WEXITSTATUS. Ryo 2005-12-11 Fix buffer overflows which can be triggered remotely. -- common/porting.c: Re-implement open_and_uncompress(). The new implementation should not contain any buffer overflows anymore. It also fixes possible exploits due to funny characters in file names. plugins/cfpython/cfpython.c: Use snprintf() to truncate long strings. server/login.c: Reject invalid user names. socket/loop.c: Make overflow detection work while reading from socket. Properly re-allocate memory for listen command. Fix buffer overflow for too long command names. Andreas Kirschbaum 2005-12-11 lib/collect.pl.in: General cleanup - just whitespace changes. Andreas Kirschbaum 2005-12-11 Prevent the map loader from crashing when loading maps with incorrect headers. Changes are based on patch #1275563 by Kevin Rudat. -- common/map.c: Do not dereference NULL value for map headers without parameter. Andreas Kirschbaum 2005-12-11 Apply modified second part of patch #1275563 (Crossedit: fix map attributes window) by Kevin Rudat: let crossedit save/load tiling paths as the mapmaker entered them, rather than saving the normalized version. -- common/map.c: Delay path normalization from map loading time (load_map_header()) to access time (load_and_link_tiled_map()) if running as editor. Andreas Kirschbaum 2005-12-11 server/move.c: In move_ob() print error message instead of crashing: check passed arguments before accessing them. common/object.c, server/{pets.c,player.c,spell_attack.c,time.c}, socket/request.c: Properly check for P_OUT_OF_MAP after calling get_map_flags(). Andreas Kirschbaum 2005-12-10 common/path.c: add missing global.h include. make_win32/crossfire32.dsp: add path.c and some headers. Ryo 2005-12-09 Apply slightly modified first part of patch #1275563 (Crossedit: fix map attributes window) by Kevin Rudat: make the map attributes dialogs work again. -- crossedit/Attr.c: Remove code to handle map attributes dialogs. crossedit/Crossedit.ad, crossedit/Crossedit.ad.h: Update X11 resources. crossedit/Defines.h: Add typedef for MapAttr. crossedit/{Edit.c,Edit.h}: Remove/update code to handle map attributes dialogs. crossedit/Makefile.am: Add new files MapAttr.c and MapAttr.h. crossedit/Makefile.in: Rebuilt. crossedit/{MapAttr.c,MapAttr.h}: New functions containing code to handle the main map attributes dialog. crossedit/Cnv/CnvPrompt.c: Convert CnvPromptStr into char array. Andreas Kirschbaum 2005-12-09 Remove a strange feature of normalize_path(): it did convert the path "//" into "/". Also add a stand-alone application for regression testing this function, and fix a few issues with ".." in path name. -- common/path.c: New file containing the modified implementation and the stand-alone application. include/path.h: Prototypes for path.c. server/main.c: Remove implementation; call renamed function. common/Makefile.am, include/Makefile.am: Add new files. common/Makefile.in, include/Makefile.in: Rebuilt. Andreas Kirschbaum 2005-12-08 server/ban.c: General cleanup - whitespace changes, rename variable names. Should not affect function. server/apply.c: In player_apply() do not consider DM PLAYERs to be DM-created items. This prevents the server from destroying the player object (and crashing shortly afterwards). Andreas Kirschbaum 2005-12-07 Apply slightly modified patch #1293744 (Inversed ban entries) by Thomas Equeter. -- server/ban.c: In checkbanned() recognize '~' prefix to allow entries. Also fix possible buffer overflow. Andreas Kirschbaum 2005-12-07 Apply modified patch #1293774 (Kick banned hosts at once) by Thomas Equeter: disconnect new connection for banned host right after connecting. Also add support for user name in ban files. -- lib/ban_file: Update comments and examples to new syntax. server/ban.c: Allow a NULL user name to check for host name only. server/c_misc.c: In receive_player_password() check for banned user name. server/player.c: In add_player() remove check for banned host - this was already done if we reach this state. socket/init.c, include/sockproto.h: Pass ip address as a string. socket/loop.c: In doeric_server() check for banned host after a new connection was accepted. Andreas Kirschbaum 2005-12-07 Apply patch #1371956 (code cleanup patch) by Stefan Huehner: fix old-style function declarations and prototypes to proper Ansi C syntax. This patch allows the compiler to check function arguments and also removes some warnings when compiling with -Wstrict-prototypes. -- All affected files: Convert "void foo()" into "void foo(void)". Andreas Kirschbaum 2005-12-06 Fix bug #1173563 (Creator created Bombs malfunction): Creators and Converters now copy items from inventory. Fallback (for empty inventory) is the old behavior to create the new item from other_arch. If the inventory contains more than one item, a random one is picked. -- common/loader.l: Mark inventory of CREATOR and CONVERTER as FLAG_CONTENT_ON_GEN. common/loader.c: Rebuilt. common/object.c: Update x/y/map for non-head parts to make inserting multipart objects via insert_ob_in_ob_at() work. server/apply.c: In convert_item() consider inventory for item to create. server/time.c: In move_creator() consider inventory for item to create. In process_object() ignore item flagged as FLAG_IS_A_TEMPLATE. (Otherwise bombs in inventories would explode prematurely.) Andreas Kirschbaum 2005-12-05 New plugin property for player: marked item, added Python wrapper. Modified files: include/plugin.h plugins/cfpython/cfpython_object.c plugins/cfpython/include/cfpython_object_private.h plugins/common/include/plugin_common.h plugins/common/plugin_common.c server/plugins.c plugins/cfpython/cfpython.c: fix invalid reference management. Don't return NULL but Py_None. Ryo 2005-12-04 Fix bug #1372194 (stairways now block movement). -- random_maps/exit.c: In unblock_exits() check correct field move_block to find blocking exits. Andreas Kirschbaum 2005-12-03 server/apply.c: In move_apply() properly decrement recursion counter. Andreas Kirschbaum 2005-12-02 server/spell_attack.c: Add some missing P_IS_ALIVE checks - these weren't needed in the past because living objects would block movement - with new movement code, isn't always the case. server/time.c: Fix player movers so that if the victim doesn't have any movement type, we move it. MSW 2005-11-30 common/time.c: In move_teleporter() and move_player_mover() do not affect DMs if FLAG_WIZPASS is set. common/object.c: In check_move_on() do not affect DMs if FLAG_WIZPASS is set. This prevents DMs from triggering traps when walking over them. Andreas Kirschbaum 2005-11-30 common/map.c: Replace code with OB_TYPE_MOVE_BLOCK - effectively same as what it was. include/define.h: Update OB_TYPE_MOVE_BLOCK so that spaces that don't block any type of movement doesn't block objects that also don't have movement. This fixes cases of gates not pushing objects off them. server/c_party.c: Remove double use of ->next pointer/loop in confirm_party_password() - fixes crash and likely makes setting party password work more reliably. MSW 2005-11-29 common/object.c: Fix wrong comparision operator in free_object2() to make monsters drop loot again. Andreas Kirschbaum 2005-11-28 Basically added a parameter to 'skills' command to filter skills. And one char/const char* fix. common/anim.c: use const char* for find_animation. include/libproto.h: find_animation uses a const char*. include/sproto.h: fix prototype. server/c_wiz.c: send parameter to show_skills. server/skill_util.c: add search parameter to show_skills command. Ryo 2005-11-27 plugins/cfpython/cfpython_map.c: use wrappers instead of direct property access. plugins/common/include/plugin_common.h: new wrappers for maps. plugins/common/plugin_common.c: new wrappers for maps. Ryo 2005-11-26 plugins/cfpython/Makefile.in: rebuilt. Andreas Kirschbaum 2005-11-23 Plugins can now get archetypes. Added a check in cfapi_object_set_property to prevent changing archtypes. Fixed some Python bugs related to map properties. Added Crossfire.GetArchetypes and Crossfire.GetMaps to get all archetypes/maps. Modified files: include/plugin.h sproto.h plugins/cfpython/include: cfpython.h cfpython_map_private.h cfpython_object_private.h plugins/cfpython/cfpython.c cfpython_map.c cfpython_object.c server/plugins.c New files: plugins/cfpython/include/cfpython_archetype.h cfpython_archetype_private.h plugins/cfpython/cfpython_archetype.c Ryo 2005-11-20 server/shop.c: adjust minimum value that shop_specialisation_ratio can return to 0.1. This should stop some prices being exceptionally high. Brendan Lally 2005-11-19 Commit for new blocking code. Not going to dictate all the changes - but will outline the broad points. Note also that the doc/Developers/objects is updated and goes into more details also. - check for P_WALL no longer used - instead, need to use GET_MAP_MOVE_BLCOK and check against movement type of objects. - arch_blocked() changed to ob_blocked(), now takes object. Needed because just looking at archetype move_ values is no longer sufficient. - find_first_free_spot() changed to take object, since it just calls arch_blocked() - FLAG_FLYING removed, now in move type. - walk_on/walk_off/fly_on/fly_off removed - now based on move_on and move_off fields. - Map space structure extended to hold the move_on/move_off, etc values so that we can shortcut some processing by not having to check every object on the space when something enters it if move_on isn't set. - archetypes recollected - boulders needed move_walk to properly trigger buttons. - Note that the new plugin code has to be fixed up for the new movement code. Look for FIXME in plugins/cfpython/cfpython_object.c MSW 2005-11-15 Apply patch 1352485 newpickup rings/amulets courtesy anonymous user. include/define.h: add PU_JEWELS server/c_object.c: handle new type. server/player.c: handle new type. Ryo 2005-11-12 server/plugins.c: Properly update client view after removing objects. Andreas Kirschbaum 2005-11-10 server/plugins.c: Properly update client view after changing object names. server/plugins.c: Return an empty string if an object has no message. This makes Object.Message() always return a string object, which removes the need for special case code to handle empty messages. include/sproto.h, server/monster.c: Declare parameter of communicate() as "const". Andreas Kirschbaum 2005-11-09 Implement new functions for the Python plugin: Object.WeightLimit, Object.InsertInto(Object), Object.NamePl. Change Object.Name to set both name and name_pl. This should prevents scripts from failing to set name_pl. -- plugins/cfanim/include/cfanim_proto.h, plugins/common/include/plugin_common.h: Add prototypes. plugins/cfpython/cfpython_object.c: Add callback functions for new Python functions. plugins/cfpython/include/cfpython_object_private.h: Add prototypes for callback functions. Add callback functions to Python object descriptors. plugins/common/plugin_common.c: Add missing helper functions. Andreas Kirschbaum 2005-11-09 server/shop.c: When we are counting unpaid items and their values, to check if a player may leave a shop, make certain that we count all of them, and don't stop when we have dropped into a container (such as a spellbook) Brendan Lally 2005-11-09 plugins/cfpython/cfpython.c: Add missing 'PyType_Ready' calls for map and player, failure to do so crashes with Python objects destructors set to 0. Ryo 2005-11-07 server/spell_effect.c: fix WoR not executing on cursed ground with WIZCAST set. Ryo 2005-11-06 server/skills.c: In do_throw() abort processing if the thrown object was destroyed before it gets its first move. Andreas Kirschbaum 2005-11-06 server/build_map.c: test FLAG_IS_FLOOR too, type == FLOOR is not always enough. Ryo 2005-11-05 server/shop.c: In value_limit() return the unmodified item price if not in a shop or not for a player. Andreas Kirschbaum 2005-11-05 plugins/cfpython/cfpython.c: added GetPrivateDictionary and GetSharedDictionary methods to keep data between runs and share data between scripts. Ryo 2005-11-05 plugins/Makefile,plugins/cfanim/Makefile: Remove files to be generated by configure. server/main.c: Fix possible out-of-bounds array access. Andreas Kirschbaum 2005-11-05 Fix case for [sg]etReturnValue. Add compare operator for object and map (of course only == is relevant). Modified files: plugins/cfpython/include/cfpython_map_private.h plugins/cfpython/include/cfpython_object_private.h plugins/cfpython/cfpython.c plugins/cfpython/cfpython_map.c plugins/cfpython/cfpython_object.c Ryo 2005-11-05 aclocal.m4, configure, utils/config.guess, utils/config.sub, utils/ltmain.sh, *Makefile.in, plugins/cfanim/Makefile, plugins/Makefile: Rebuilt. lib/Makefile.am: Add template-maps to list of directories to create while install. Andreas Kirschbaum 2005-11-05 lib/wizhelp/reset: document use of '.' as an argument Brendan Lally 2005-11-05 random_maps/treasure.c: Fix out-of-bounds array access if place_chest() cannot find a free spot to place a new chest. Andreas Kirschbaum 2005-11-01 Fix bug #1082534 (monks with weapons): Now monks properly are denied from using weapons. Only newly created monks are affected since it now relies on a force named "no weapon force" in the player's inventory. The problem was that become_follower() assumed it was the only means do allow/disallow weapon use. -- server/gods.c: Do not let the god allow using weapons if a "no weapon force" object is present in the player's inventory. lib/treasures: add force to monk's treasure list. Andreas Kirschbaum 2005-11-01 Fix bug #815620 (CFPython.SetQuantity() doesn't update client): now notifies the client after changing nrof and/or weight. -- server/plugins.c: Re-calculate player's weight and send item change notifications in cfapi_object_set_property(). Andreas Kirschbaum 2005-11-01 Improve newpickup command: add new flag PU_NOT_CURSED to ignore cursed items. -- include/define.h: Add flag #define. server/c_object.c: Add "notcursed" option to pickup command. server/player.c: Respect new flag in check_pickup(). Andreas Kirschbaum 2005-11-01 plugins/cfanim/cfanim.c: remove printf for properties. Export functions for DLL for Win32. plugins/cfanim/cfanim.h: remove obsolete definitions (see plugin_common.h). plugins/cfanim/cfanim_proto.h: fix definition for exported functions. plugins/common/plugin_common.c: add gettimeofday for Win32. plugins/common/include/plugin_common.h: add gettimeofday for Win32. Ryo 2005-11-01 server/plugins.c: Print error message for event_xxx objects with missing or invalid parameters. Also remove the affected object to prevent multiple error messages. Andreas Kirschbaum 2005-11-01 Add new function object_get_env_recursive() to find the outermost environment object for a given object. -- common/object.c, include/libproto.h: Add function. server/{rune.c,spell_attack.c}: Use function where appropriate. Andreas Kirschbaum 2005-11-01 General cleanup of weather code. -- server/weather: Declare many functions and variables as "static", add prototypes for affected functions. Declare some variables as "const". include/sproto.h: Remove prototypes for now static functions. include/tod.h: Add "const" to strings. Andreas Kirschbaum 2005-11-01 Fix bug #1102975 (Bronze items not keeping their + in alchemy): the problem was that a formula for full_helmet did exist but not for b_full_helmet. Since both helmet's names are "full helmet", the recipe was selected even if using the ingredient b_full_helmet. This fix adds new formulae for alternative archetypes with the same name as the base object, and makes the server code select the matching formula from multiple arch names in the "arch" field. -- common/readable.c: Use new fields to build messages. common/recipe.c: Make alchemy work for recipes with multiple base archetypes. include/{libproto.h,sproto.h}: Update prototype. include/recipe.h: Split string field arch_name into string list fields arch_name and arch_names. lib/formulae: Add archetype names to formulae for all items with same name as the base object. Also fix a few name mismatches that prevent any object from matching, and change transmution formulae to normal formulae where base name does not match archetype name. server/alchemy.c: Disable debugging code. Make alchemy work for recipes with multiple base archetypes. Andreas Kirschbaum 2005-10-31 server/c_wiz.c: Don't crash on "create" a living thing that has some part out of the map. Forbid removing a 'PLAYER' object. Ryo 2005-10-31 random_maps/style.c: Pass correct sorting function to qsort(): the sorted array contains pointers to strings, not strings. Andreas Kirschbaum 2005-10-29 Fix bug #1236244 (Exp from scrolls): reading a scroll of charm monsters or meteor swarm now gives exp for use magic item, not summoning or pyromancy. -- server/spell_attack.c: In mood_change() use skill from scroll, not from spell. In move_swarm_spell() use the spell "owner" as the object casting the spell. Andreas Kirschbaum 2005-10-29 include/config.h: DEBUG just been defined, no need to define it again. include/win32.h: typedef for socklen_t. random_maps/random_map.c: generate_random_map can use a const char*. random_maps/rproto.h: fix generate_random_map definition. server/plugins.c: EVENT_CRASH doesn't really need a parameter, especially if not initialized :) Ryo 2005-10-29 Prevent problems (crashes) for large item piles. Now limit nrof to less than 2^31. -- common/object.c: In CAN_MERGE() pretend that the objects are not mergeable if the nrof sum would overflow. common/porting.c: Fix buffer overflow for large numbers in ltostr10(). Also make n=1L<<31 work correctly. plugins/cfpython/cfpython_object.c: In Object_SetQuantity() raise an exception for negative nrof values. plugins/common/plugin_common.c: Reject negative nrof values in cf_object_set_nrof(). plugins/cfanim/include/cfanim_proto.h, plugins/common/include/plugin_common.h: Update prototype. server/plugins.c: Treat negative nrof as nrof=0 when setting CFAPI_OBJECT_PROP_NROF property. server/time.c: In move_duplicator() limit nrof of created items. Andreas Kirschbaum 2005-10-29 Fix compiler warnings. Most changes do not change the program (remove unused variables, convert "if(x = y)" into "x = y; if(x)"); a few actually fix (possible) problems (fix uninitialized variables, fix printf format specifiers, fix mismatches between signed and unsigned variables, add missing return and default statements). -- Affected files: common/{arch.c,init.c,item.c,map.c,object.c,re-cmp.c,readable.c,region.c, shstr.c}, crossedit/{Attr.c,Edit.c,Cnv/CnvPath.c}, include/sproto.h, plugins/cfanim/cfanim.c, plugins/cfpython/{cfpython.c,cfpython_object.c}, plugins/cfpython/include/{cfpython_map_private.h,cfpython_object_private.h}, random_maps/{rogue_layout.c,special.c,square_spiral.c}, server/{apply.c,attack.c,build_map.c,c_misc.c,c_object.c,c_party.c,init.c, main.c,monster.c,pets.c,player.c,plugins.c,shop.c,skill_util.c,spell_util.c, weather.c}, socket/{loop.c,request.c} Andreas Kirschbaum 2005-10-28 Fixes my previous commit. Should now properly allocate/deallocate the faces_sent array. -- common/player.c: Free faces_sent in free_player(). include/newserver.h: Add field faces_sent_len to NewSocket struct. server/player.c: Allocate and copy faces_sent in add_player(). socket/init.c: Use faces_sent_len in InitConnection(). socket/loop.c: Initialize faces_sent_len in doeric_server(). Andreas Kirschbaum 2005-10-28 The archetypes now contain more than MAXFACENUM (5000) faces. The following changes remove the fixed limit of the number of faces. The server now allocates enough memory to handle all defined faces. include/newserver.h: Remove MAXFACENUM since it is not used anymore. Change NewSocket.faces_sent from array into pointer. socket/{init.c, loop.c}: Allocate/initialize NewSocket.faces_sent. socket/request.c: Remove safeguard/error message since it depends on MAXFACENUM. Andreas Kirschbaum 2005-10-24 Code improvements: common/image.c: Declare some variables and functions as static or const; add safeguards while loading config files; remove support for numeric face names (no active archetype or map does use it); in free_all_images() deallocate memory allocated for smoothing. crossedit/xutil.c: Remove assignment to nrofpixmaps since ReadBmapNames() already sets this variable. include/{global.h, libproto.h, loader.h}: Remove now static variables and functions. Andreas Kirschbaum 2005-10-24 common/readable.c: Fix out of bounds access to max_titles[] in init_book_archive(). common/image.c, include/define.h, include/global.h: Remove unused variables potion_face and POTION_FACE_NAME. common/image.c, include/global.h: Remove unused variable blank_look. Andreas Kirschbaum 2005-10-24 Make shout command work in old socket emulation mode. common/commands.c: Sort all command arrays in init_commands(). Andreas Kirschbaum 2005-10-23 common/item.c - fix spelling mistake common/utils.c include/libproto.h - new function make_list_like that takes a string of comma deliminated words, and puts an and in the right place. include/sproto.h server/apply.c server/shop.c -new function can_pay - checks that a player can pay for every unpaid item that they are holding before starting to purchase them. Brendan Lally 2005-10-21 plugins/cfpython/{Makefile.in, Makefile.am}, plugins/cfpython/include/cfpython.h: Corrected improper regeneration of the function prototypes using "make proto" for the cfpython plugin. Gros 2005-10-20 plugins/cfpython/{cfpython.c, cfpython_object.c, cfpython_map.c}, plugins/cfanim/cfanim.c, plugins/common/plugin_common.c, server/plugins.c: Added support for execution of python_init.py upon initialization of cfpython. Reduced the console spam produced by various leftover debugging messages. Gros 2005-10-19 plugins/common/include/plugin_common.h: add CF_PLUGIN macro. plugins/cfpython/cfpython.c: add CF_PLUGIN to exported functions. plugins/cfpython/include/cfpython_proto.h: fix prototypes. Ryo 2005-10-19 plugin/*, plugin_logger/*, plugin_anim/*, plugins/*, server/{apply.c, attack.c, c_chat.c, c_object.c, c_wiz.c, gods.c, main.c, monster.c, player.c, skills.c, swap.c, time.c, timers.c}, include/{plugin.h, sproto.h}: Replaced the old plugin interface by the 2.0 one. Upgraded the Python and Animator ones to the new interface. Removed obsolete Logger plugin. Gros 2005-10-19 server/main.c: Template Maps: Allow %x, %y, and %n in the path to respectively be replaced with, the x coord, the y coord, and the parent map name. Alex Schultz 2005-10-18 server/{main.c, swap.c}, common/map.c, include/{libproto.h, map.h}: Add support for random template maps (still need to document, and still need to add support for template maps created from non-random templates) Alex Schultz 2005-10-16 common/info.c: fix -m1 crashing (34 chars, not 32!), and -m2 crashing under Win32. include/sproto.h: fix cast_change_ability definition. server/gods.c: fix cast_change_ability to hide the 'can't recast' message. server/spell_effect.c: don't stack word of recall forces. Add a 'silent' parameter to cast_change_ability to not display 'can't recast xx while xx is in effect' server/spell_util.c: fix cast_change_ability call. Ryo 2005-10-16 include/{global.h, sproto.h, config.h}, server/init.c, common/init.c, lib/Makefile.in: Add directory in preparation for template (where the template can optionally be from the random map generator) maps. Alex Schultz 2005-10-15 server/c_wiz.c: make reset command show the names of other players on the map when it fails. Brendan Lally 2005-10-14 server/c_party.c: fix another obscure party crash bug Brendan Lally 2005-10-12 server/c_party.c: fix a couple of loops that could crash under certain circumstances Brendan Lally 2005-10-11 common/object.c: use canonical_key instead of key, else == always fails. server/apply.c: drop "on_use_yield" item if required when applying potion, food or poison. This lets players get empty bottles/vials/... when using potions. Ryo 2005-10-09 Added GetMarkedItem to Python, cleaned compilation warnings. plugin/plugin_python.c plugin/include/plugin_python.h Moved gps code to Python script, thus cleaning relevant code from server core. common/item.c: remove item description. include/define.h: remove gps define. server/apply.c: remove gps function. Ryo 2005-10-08 Prevent objects from losing inventory when thrown. include/libproto.h, common/object.c: Add new parameter "free_inventory" to free_object(). Is set, free inventory as well instead of dropping it on the ground. common/object.c: In get_split_ob() prevent inventory of splitted object to be dropped. Andreas Kirschbaum 2005-10-07 common/object.c: Use object_create_clone in get_split_ob; Fixes things inside of objects disappearing when throwing. Alex Schultz 2005-10-7 Make damage done by area spells not depend on monster size. include/sproto.h, server/attack.c: Add additional parameter "full_hit" to hit_map() and hit_player(). If set, do full damage, if unset scale down by monster size. server/{apply.c, attack.c, disease.c, monster.c, player.c, rune.c, spell_attack.c, spell_effect.c, spell_util.c, time.c}: Change callers to set "full_hit" parameter according to the attack used. Andreas Kirschbaum 2005-10-07 common/{arch.c, object.c}, crossedit/{Attr.c, Defines.h, Edit.c}, include/libproto.h, server/{plugins.c, time.c}: Rename functions with mixed-case names to lower case only. crossedit/Defines.h: Remove prototypes for nonexisting functions. Andreas Kirschbaum 2005-10-07 server/apply.c: In prepare_weapon() do not lose a reference to the item name. Andreas Kirschbaum 2005-10-06 include/sproto.h, server/shop.c - make value_limit static, change its arguments to add some checking for NULL pointers Brendan Lally 2005-10-06 server/monster.c: In move_monster() prevent hp/sp overflows for monsters with very high maxhp/maxsp and very high regeneration rates. Andreas Kirschbaum 2005-10-05 common/treasure.c - prevent crashes with some broken treasure lists. Brendan Lally 2005-10-05 server/shop.c: convert val to sint64 - compilation issues with Win32. Checked with patch author that it's fine. Ryo 2005-10-04 common/map.c - fix output names in new_save_map -- server/shop.c - don't assume that shop_specialisation_ratio only gets passed items with valid types. -- common/map.c - /actually/ fix pointer issue -- common/map.c - fix potential issue with NULL pointer Brendan Lally 2005-10-04 common/map.c - fix an inequality in for loop - not sure if this actually fixes anything of note, but the previous form was definatly wrong. common/item.c - big item type table, function to deal therewith common/loader.l - add player_sold flag common/map.c - shop related header parsing include/define.h - define typedata, player_sold flag and some new shop flags include/libproto.h - define typedata related functions include/map.h - define new shop headers include/sproto.h - define new functions in shop.c server/apply.c - Change shop mat usage message server/c_object.c - Change display of price estimates server/shop.c - new functions describe_shop, value_limit, shopkeeper_approval, shop_greed, shop_specialisation_ratio, substantially alter query_cost_string and query_cost to make use of these server/skill_util.c - make bargaining a directly usable skill doc/Developers/shops - document the above doc/Developers/maps-technical - add shopheader names, and reference to shops doc Brendan Lally 2005-10-03 server/disease.c: check for value <= 0 as some diseases get dumped on a map with value == 0 (negative values will eventually underflox, but it'll take time). Apply patches courtesy quisar. #1307880 Allow to add a param to the cast command #1306987 Allow to summon lower level pet monsters Modified files: include/player.h sproto.h server/c_range.c login.c pets.c player.c spell_util.c Ryo 2005-10-01 common/button.c: explicit cast of stats.food to uint32 when used as sacrifice count. common/image.c: strlen returns size_t. Remove unused FindFaceName. common/object.c: obj::count is tag_t. Can't decrease item's nrof by a negative value. include/libproto.h: fix prototypes. include/player.h: weight and weight_limit are sint32, so last_ should be the same. include/sproto.h: nrof is uint32, not int. server/apply.c: nrof is uint32, can't eat a negative number of items. obj::count is tag_t. server/c_misc.c: remove unused variable. server/c_object.c: use uint32 instead of int to specify number of items to drop/put. server/plugins.c: strlen returns size_t. server/spell_effect.c: distances are uint32 and not int. socket/loop.c: remove now obsolete cast of -1 to uint32 for last_weight. socket/request.c: explicit cast of weight_limit to sint32 when comparing to last_weight. Ryo 2005-10-01 plugin/plugin_python.c: added CF[SG]etWeightLimit. plugin/include/plugin_python.h: function prototypes. server/plugins.c: update player inventory if item teleporter from that. Ryo 2005-09-30 lib/collect.pl.in: can now use lines like "attacktype fire electricity poison" instead of hard to remember numbers. Numbers are still supported, you can even mix both. Ryo 2005-09-28 server/spell_effect.c: In recharge() verify that the object to charge is in fact a wand or staff. Andreas Kirschbaum 2005-09-27 Changed quest behaviour, now uses its own archetypes. Can change npc/magic ear text based on quest status. Warning: not totally tested. Quest start/end works, rest needs some tweaks & fixes. common/quest.c: new functions, some cleaning. doc/Developers/quest: update (partially). include/define.h: new item types. include/libproto.h: new definitions. server/c_misc.c: update. server/monster.c: take into account quest overrides. server/time.c: markers now start/end tasks if needed. Ryo 2009-09-25 server/c_party.c - fix another party list corruption bug, and a couple of possible infinite loops Brendan Lally 2005-09-25 Clean some compilation warnings. common/map.c: remove unused variable. common/readable.c: strlen returns size_t. include/object.h: objectlink id should be tag_t since it's the item's "count" field. server/c_misc.c: strlen returns size_t. server/c_object.c: strlen returns size_t. server/c_party.c: remove_party returns void, value not used anyway. Fordward declaration. server/c_wiz.c: settings.worldmaptiles[x|y] is uint32. server/gods.c: strlen returns size_t. server/hiscore.c: maxchar is const. server/skill_util.c: strlen_returns size_t. Ryo 2005-09-25 include/player.h sproto.h server/attack.c c_party.c player.c Fix several bugs in patch #1194964, including one that caused segfaults one that corrupted the party list, and one that broke party password recognition remove partyid from the party struct - use party pointers instead remove functions find_party() and find_party_struct() - no longer needed or used. make form_party a local function - it is only used by the party form command, and can't easy be used safely elsewhere. Brendan Lally 2005-09-25 server/build_map.c: remove unused variable. -- Commit patch #1194964 (party obsoletion) by cavesomething. Affected files: include/player.h sproto.h server/apply.c attack.c c_party.c login.c main.c pets.c player.c skill_util.c skills.c spell_util.c -- include/win32.h: turn off harmless warning. Ryo 2005-09-24 Fix bug #744327 ('immortal' monsters): Prevent monsters from loosing hp or sp if they have negative Con/Pow. For hp, this made some monsters unkillable because they eventually had negative hp. -- server/monster.c: In move_monster() do gain hp/sp only if Con/Pow is positive. Andreas Kirschbaum 2005-09-24 Update client inventory view for players dieing in a shop with unpaid items in inventory. -- server/player.c: Send removed item to client in remove_unpaid_objects(). Do not call remove_unpaid_objects() multiple times in kill_player(). Andreas Kirschbaum 2005-09-17 Allow directors/movers to specify a specific arch/name/race. include/sproto.h: Add should_director_abort to here. server/{apply.c, time.c}: Add should_director_abort for the logic code for this change, and add checks for it in director/mover code. doc/Developers/objects: Add documentation for directors including this change, and update mover documentation. Alex Schultz 2005-09-15 Make untriggered TIMED_GATEs work again. server/apply.c: Clear object speed only for connected objects. Andreas Kirschbaum 2005-09-13 This change is mostly cosmetic and a preparation for the new movement type code. Basically, it just changes the old object movement_type field to attack_movement. This makes sense because that is what that field is called in saved and loaded objects/archetypes, and thus frees up that name for the new movement code. -- common/button.c: field name change common/loader.{cl}: field name change doc/Developers/objects: Add section on new movement types, update old documentation to note it is attack_movement and not movement_type field that is important. include/object.h: field name change. server/attack.c: field name change. server/monster.c: field name change server/pets.c: field name change server/skills.c: field name change. server/spell_attack.c: field name change server/spell_effect.c: field name change MSW 2005-09-12 Allow a DM to cast spells and prayers in no-magic/no-prayer areas. Add new command "wizcast" to toggle this setting. common/loader.l: Set/reset FLAG_WIZCAST for flag "wiz". common/loader.c: Rebuilt include/define.h: Add new flag FLAG_WIZCAST; remove unused flag FLAG_NO_PRETEXT. lib/Makefile.am: Add new help file for wizcast. lib/Makefile.in: Rebuilt. plugin_animator/plugin_animator.c: Set/reset FLAG_WIZCAST in animate_one(). server/apply.c: Always allow FLAG_WIZCAST to enchant weapons and armour. server/c_misc.c: Add new function command_wizcast(). server/c_wiz.c: Set/reset FLAG_WIZCAST when entering/leaving DM mode. server/commands.c: Add "wizcast" command. server/spell_effect.c: Always allow FLAG_WIZCAST to use the spell probe. server/spell_util.c: Always allow FLAG_WIZCAST to cast spells and prayers. Andreas Kirschbaum 2005-09-09 server/monster.c: Set FLAG_READY_SKILL in monster_check_apply() for monsters with skills. This fixes hill giants and trolls not throwing boulders anymore. server/monster.c: Add missing "break" statement in monster_can_pick(). It did prevent some monsters from picking up scrolls. Andreas Kirschbaum 2005-09-08 common/{anim.c, image.c, los.c, map.c, porting.c, treasure.c}, include/define.h, random_maps/treasure.c, server/{apply.c, c_misc.c, c_object.c, c_wiz.c, commands.c, daemon.c, hiscore.c, init.c, login.c, player.c, plugins.c, resurrection.c, weather.c}, socket/{init.c, item.c, loop.c, lowlevel.c}: Use LOG() for error messages and debug output instead of stdout/stderr. Include filename in error messages. server/resurrection.c: Fix error message in read_player(). Andreas Kirschbaum 2005-09-04 socket/item.c: Make selecting objects from ground view work again. common/object.c: Fix update of player's ground view in insert_ob_in_map(). Previously the ground view was not updated after applying exits or after being hit by a spell. Andreas Kirschbaum 2005-09-03 Fix bug #1102991 (Duplicate grapical display of the same monster): doc/Developers/protocol: Change semantics of map_scroll command to what the server actually does: big faces outside the viewable area are cleared. Add newmap command. include/newserver.h: Increase MAX_HEAD_OFFSET to 8 (the size of a Greater Demon). socket/request.c: MapRedrawCmd(): Disable mapredraw command; it is now just ignored. MapNewmapCmd(): Clear map state before sending newmap command. check_head(): Remove redundant code. update_space(): Move invariant condition out of loop to speed it up. Fix uninitialized variable. Remove redundant condition. Fix off-by-one array access. update_smooth(): Remove unused code. Properly send cleared big faces. draw_client_map(): Remove duplicate check. Properly clear newly visible area when scrolling the map. Andreas Kirschbaum 2005-08-31 common/{loader.l, map.c, object.c}, include/{define.h, map.h, object.h}: Accelerate map loading (a lot) and map saving (a bit) codes to improve map transition experience. common/loader.c: Rebuilt. Add (slightly reformatted) patch #1276121 (Crossedit: handle big faces) by Kevin Rudat: crossedit/CrEdit.c: UpdatePosition(): Use new drawing subroutines. crossedit/CrFace.c: DrawObject(): Use new drawing subroutine. crossedit/CrList.c: Redisplay(): Use new drawing subroutine. crossedit/CrUtil.c, crossedit/CrUtil.h: Remove FaceDraw(), add DrawFacePart() and DrawPartObject(). crossedit/png.c: Upload the whole image, not just the top-left corner. Andreas Kirschbaum 2005-08-30 Fix bug #1256173 (Magic drain not exploding head): server/spell_effect.c: Prevent mana transfer to/from caster himself; also create fireball for overcharges resulting from sucking mana. Andreas Kirschbaum 2005-08-30 Fix bug #1059537 (Chainmail mutations): common/loader.l: Remove code that "fixes" broken item names by removing a leading material name. This effectively renames "mithril chainmails" into "chainmails". common/loader.c: Rebuilt. Andreas Kirschbaum 2005-08-29 Fix player weapon speed/speed. There are a few bugs this fixes: 1) when player hit something, a has_hit field was set to true, to denote they hit something and to use weapon speed. However, this was only cleared when player issued a command. Thus, if you are running and hit something, you'd continue at weapon_speed pace until you needed to change direction. 2) Because has_hit was used, this basically put in a 1 tick lag - you'd hit something, but not until objects were processed and speed given would you get your extra speed. Likewise, after you killed something, you'd get your burst of speed for the next tick also. -- server/main.c: Clear has_hit, change function to only do bounds checking, not actually do weapon_speed adjustments. server/player.c: Give player speed boost when they hit something. MSW 2005-08-28 Add patch #1274385 by Kevin Rudat to make crossedit draw floors on tiles with items. crossedit/CrEdit.c: Add call to update_position() in UpdatePosition(). Andreas Kirschbaum 2005-08-28 Add patch #1271417 by Kevin Rudat to stop crossedit losing regions. Patch is slightly modified to properly handle all map fields. crossedit/Edit.c: Copy all map fields in MapMoveScrollResize(). Do not add a msg header to already existing maps. crossedit/crossedit.c: Call init_regions() at program initialization. Andreas Kirschbaum 2005-08-28 socket/init.c: Make setsockopt(REUSEADDR) work if using gcc in Ansi C mode on Linux. Andreas Kirschbaum 2005-08-28 common/map.c: Change default values for reset_timeout, enter_x, and enter_y map headers to zero. In set_map_reset_time() use MAP_DEFAULTRESET if reset_timeout is zero. This change prevents crossedit from adding these headers by just loading and saving a map. include/config.h: Add MAP_DEFAULTRESET. Andreas Kirschbaum 2005-08-27 server/rune.c: Fix crash if casting disarm out of map bounds. server/spell_effect.c: Fix crash if casting polymorph out of map bounds. Andreas Kirschbaum 2005-08-25 Apply patch 1200555 - addition of key/value lists which allows arbitrary storing of data in objects - see doc/Developers/key-value for more information --- loader.l, loader.c: Add add_key_value() function which parses the unknown line in the object/archetype. Update get_ob_diff() to make differences for the key/value lists. common/object.c: Add functions for properly comparing the key/value lists, setting and getting the vaues, clearing values upon freeing of object, etc. doc/Developers/Makefile.am: Add key-value file. doc/Developers/key-value: Documentation of this feature. include/libproto.h: Rebuilt include/object.h: Addition of key_value struct, addition of key_values field to object. MSW 2005-08-22 socket/request.c: Fix range checking of toggleextendedtext parameters. Andreas Kirschbaum 2005-08-17 The following fix code that basically does "for(x = pos-5; x < pos+5; x++)". This is not correct because it includes "pos-5" but not "pos+5". common/los.c: Make lighted distance equal in all directions. server/disease.c: Make infection distance equal in all directions. server/monster.c: Make lighted distance equal in all directions. Andreas Kirschbaum 2005-08-17 Add patch by Kevin Rudat for applyable but non pickable objects to have item items. doc/Dvelopers/objects: Update item types. socket/item.c: Use the head of any objects we send. Should generally only be an issue for objects on the ground, as currently there is no large objects players can pick up. Also fix up some of the formatting/ indenting in this file. MSW 2005-08-16 server/attack.c, include/define.h, common/loader.l doc/Developers/objects: Add a flag FLAG_IS_LIGHTABLE, to make lightable objects such as lanterns able to work again lib/archetypes: recollect archs Brendan Lally 2005-08-16 server/build_map.c: Add support for buildable signs, and magic mouths/ears. Alex Schultz 2005-08-15 lib/Makefile.am, lib/Makefile.in: Actually install help file for showpets. common/living.c, include/living.h: Make global arrays really const. Andreas Kirschbaum 2005-08-15 server/gods.c: Fix crash for monsters without appropriate god. server/gods.c: Add missing braces around body of if statement. Andreas Kirschbaum 2005-08-14 NPCs instead of being given a random god are for preference given the god that likes their race. If one can't be found, then we fall back to a random god. Affected files: server/gods.c include/sproto.h Brendan Lally 2005-08-12 String fields in structures using add_string are now const char*. Functions in shstr (add_refcount, add_string, free_string, ...) now take/return const char*. More argument replacing from char* to const char*. Fixed a potential string corruption in recipe.c (when dumping) and readable.c (was using strtok on a add_string-ed string, when strtok changes argument). Fixed a few type mismatch on qsort calls. Global char arrays (messages and such) are const char* too. Removed unused typedefs / structures. Affected files: common/anim.c image.c info.c item.c living.c object.c quest.c readable.c recipe.c shstr.c treasure.c include/arch.h commands.h define.h face.h funcpoint.h global.h god.h libproto.h living.h map.h material.h object.h player.h race.h recipe.h skills.h sproto.h treasure.h random_maps/random_map.h reader.[cl] style.c server/apply.c attack.c c_object.c c_range.c c_wiz.c gods.c main.c monster.c pets.c player.c plugins.c resurrection.c shop.c skill_util.c skills.c spell_attack.c spell_effect.c time.c timers.c socket/item.c Ryo 2005-08-12 Arguments are now const char* instead of char* when available. This ensures the variable is not changed in random places. Affected files: common/porting.c quest.c readable.c recipe.c re-cmp.c shstr.c treasure.c include/libproto.h sproto.h win32.h server/c_misc.c c_object.c c_party.c c_wiz.c egoitem.c gods.c hiscore.c init.c login.c main.c monster.c player.c resurrection.c rune.c shop.c skill_util.c skills.c spell_effect.c spell_util.c win32.c Ryo 2005-08-12 Add help for showpets, and update help for killpets lib/help/{showpets, killpets} Add a new command 'showpets' to give a numbered list of the pets that a player controls. These numbers can be passed to showpets to give more detail about one pet, or they can be passed to killpets to control which pets are killed. Also allow killpets to take a name as an argument. Affected files: include/sproto.h server/{c_misc.c, commands.c} Make random maps take the region of the map creates them. Affected files: random_maps/{random_maps.h, random_maps.c} server/main.c Brendan Lally 2005-08-11 ------------------------------------------------------------------------------ Changes for 1.8.0: Update for release 1.8.0. include/Makefile.am: missing quest.h file Rest automatic rebuild MSW 2005-08-10 Replaced "depletion" by ARCH_DEPLETION (defined in object.h). Affected files: common/living.c include/object.h server/apply.c gods.c spell_effect.c Ryo 2005-08-10 server/player.c: Set map for arrow as returned by get_map_flags - otherwise when firing at edge of tiled maps, arrows could end up in wrong place. MSW 2005-08-09 include/config.h: Make DEBUG default - appears last commit changed this as unrelated to actual changes in place. include/sproto.h: Rebuild server/player.c: fire_bow() - add checks for wall/out of map. fire_bow() wasn't using right coordinates on check, which caused problems in threewide mode at edge of maps. MSW 2005-08-07 plugin_logger/plugin_logger.c: make it compile under Win32. Ryo 2005-07-30 server/player.c: fix crash when news or rules > HUGE_BUF. Ryo 2005-07-29 server/{monster.c, pets.c}: Fix bugs in arena petmode and clean up most of it's logic into it's own function. lib/help/petmode: Document the arena petmode in the "help petmode" output. Alex Schultz 2005-07-28 server/skills.c: use correct sp/grace for inscription. Ryo 2005-07-27 The following changes prevent spells in player's inventories from being damaged by casting spells, using skills, or praying. server/attack.c: Limit cancellation and acid attacks to visible objects only. server/gods.c: Limit god granted remove curse/damnation to visible objects only. server/skills.c: Limit the skills sense curse and sense magic to visible objects only. server/spell_effect.c: Limit the spells detect curse and detect magic to visible objects only. Andreas Kirschbaum 2005-07-26 server/skill_util.c: don't try to send a message if monster killed/removed. Ryo 2005-07-23 socket/init.c: settings values to 0 before using'em works better, usually ^_- Ryo 2005-07-22 random_maps/random_map.h: Add prototype for set_random_map_variable(). server/main.c: Remove prototype for set_random_map_variable(). lib/Makefile.am, lib/Makefile.in, lib/help/whereabouts: Add help for whereabouts command. server/apply.c: Properly terminate destination string with '\0' in apply_item_transformer(). Avoid clearing the string buffer multiple times. Andreas Kirschbaum 2005-07-20 doc/Developers/item_transformation: fixed documentation. server/apply.c: remove incorrect comment. Item transformer uses food for max use. Replaced some hardcoded values with define. Modified files: common/arch.c include/object.h plugin/plugin_python.c server/apply.c attack.c build_map.c spell_attack.c spell_effect.c time.c Ryo 2005-07-19 include/win32.h: add PLUGIN_SUFFIX definition. Ryo 2005-07-18 server/plugins.c: Merge mostly identical code from #ifdef WIN32 and #else blocks. Use opendir/readdir/closedir instead scandir for Unix because WIN32 probably does not have these functions. Prevent loading one plugin multiple times. include/sproto.h: Update prototypes for plugin functions. server/c_wiz.c: Add success/failure messages to plugin and plugout commands. Do not crash due to missing parameter. Andreas Kirschbaum 2005-07-18 server/pets: Fix off-by-one error in follow_owner(). server/c_wiz: Allow the summon and teleport commands to place the summoned player/DM north-west of DM/player. Andreas Kirschbaum 2005-07-17 Use const char* instead of char* when possible. Remove unused variables in weather code. Affected files: common/map.c region.c utils.c crossedit/stubs.c include/funcpoint.h libproto.h sproto.h random_maps/standalone.c server/weather.c Ryo 2005-07-17 server/apply.c: Make converters that increase value non-functional. Andreas Kirschbaum 2005-07-17 server/{monster.c, pets.c}: Fixed bug in previous commit of arena petmode that cause pets that should be friendly to eachother to fight. Alex Schultz 2005-07-16 common/{map.c, readable.c, treasure.c}, crossedit/{Attr.c, png.c, Cnv/{CnvFiles.c, CnvPath.c}}, plugin_animator/plugin_animator.c, plugin_logger/maps.c, server/{alchemy.c, c_misc.c, c_wiz.c, init.c, main.c, monster.c, pets.c, player.c, resurrection.c, rune.c, skills.c, spell_effect.c, time.c, weather.c}: Fix spelling errors in string constants. server/c_misc.c: Remove superfluous trailing '\0' from strings. Andreas Kirschbaum 2005-07-15 server/{c_misc.c, monster.c, pets.c}, include/player.h: Add new "arena" petmode which allows pets to attack players and other pets while in the arena. Alex Schultz 2005-07-16 *Makefile.in, aclocal.m4, configure: Rebuilt generated files. lib/Makefile.am: Update list of help files to install. server/skills.c: Do not reveal a hidden DM in attempt_jump(). server/skills.c: Do not reveal a hidden DM in steal(). server/player.c: Ignore hidden DM in stand_near_hostile(). Formerly it always returned false if a hidden DM was present. Andreas Kirschbaum 2005-07-15 server/c_object.c: Improved pickup. You can now do pickup +bow, or pickup -shield. Much simpler then fiddling with sums of 2^x values. Ryo 2005-07-15 server/c_party.c: Make party passwords with a length of 8 characters work again. lib/artifacts: Fix type of lockpicks of quality/high quality. Andreas Kirschbaum 2005-07-15 Those commits remove the dependency on the plugin towards the library. All functions used from the plugin are hooked, instead of being called directly. This fixes bugs under Windows, and simplifies compilation. Also, many new callbacks were defined. Affected files: include/plugin.h plugproto.h sproto.h plugin/plugin_python.c server/plugins.c Note that at some point some functions could be moved out of plugin_python and put in plugin_general to be shared between different plugins. Ryo 2005-07-15 Those commits remove the whole "glue/callback" logic. Instead functions are just defined as external, and should be implemented (even as dummy) by all programs. Affected files: common/arch.c button.c glue.c init.c item.c living.c logger.c los.c map.c object.c time.c treasure.c crossedit/stubs.c: new file with dummy functions. crossedit/Makefile.[in|am]: add this new file. include/funcpoint.h libproto.h sproto.h random_maps/standalone.c: add dummy functions for those externals. server/init.c: remove obsolete setup_library() Added a wrapper function for check_trigger from plugins. include/plugin.h: new function server/plugins.c: wrapper for check_trigger. Ryo 2005-07-15 plugin/plugin_python.c: (add|free)_string should *not* be called directly under Win32. Therefore let's use the hooks. Also, when removing an object, better check it's not the current object (CFPython.RemoveObject(CFPython.WhoAmI()) anyone?). Ryo 2005-07-15 server/spell_util.c: use on_same_map instead of checking directly map pointers. Ryo 2005-07-15 Those changes implement a quest tracking system. Check the doc/quests document for more info. common/quest.c: new file with a few quests-related functions. doc/Developers/mapguide: point to quests file for instructions on quests. doc/Developers/quests: new file with instructions on how to use quests, and implementation details. doc/Developers/README: added quests file. include/libproto.h: new functions in quest.c. include/quest.h: new file with a few defines for quests. include/sproto.h: new function command_quest, update talk_to_wall definition. lib/help/quests: new help file for quests command. server/c_misc: new command_quests function. server/commands.c: link command_quests to "quests". server/monster.c: update talk_to_wall and talk_to_npc to check for quests. server/time.c: modify marker behaviour to handle quests. Ryo 2005-07-14 common/{button.c, treasure.c, utils.c}, server/{c_wiz.c, login.c, shop.c, skill_util.c, spell_effect.c}, socket/{image.c, item.c}: Fix printf like format specifiers. At least one of them fixes a means to crash the server. Andreas Kirschbaum 2005-07-14 Those changes introduce party spells. Casted spell should be defined through 'other_arch' field. Note that this needs through testing to make sure it works as intended. include/spells.h: new spell type, 'party spell'. server/spell_util.c: new spell type, party spell. Ryo 2005-07-10 server/{login.c, player.c}: Fix buffer overflow with pl->title. Based on patch by Scott Kullberg. crossedit/{Edit.c, Cnv/CnvPrompt.c}, server/{ban.c, hiscore.c, login.c, player.c, shop.c, win32.c}: Properly terminate destination string of strncpy with '\0'. server/init.c: Fix error message. Andreas Kirschbaum 2005-07-10 configure.ac, configure, aclocal.m4, Makefile.in: Add AM_MAINTAINER_MODE macro to configure.ac - this should hopefully supress auto regeneration of makefiles.in MSW 2005-07-08 Add a --with-python option to configure. Also, update the python detection script to check for 2.5 (not out yet, but might as well be prepared.) Will try to commit files in proper order so that dependency checking is correct and it won't try to rebuild makefiles or other files. -- acinclude: Updated checks for --with-python aclocal.m4: updated configure.ac,configure: Updated checks for --with-python config.sub, config.guess - update to latest versions INSTALL: Updated build directions MSW 2005-07-08 lib/Makefile.am, lib/Makefile.in: Remove map_check from normal distribution due to different license on file. random_maps/monster.c: Reduce monster density on random maps - take into account size of monsters when calculating density. utils/metaserver.pl.in: At a timeout value that limits how often clients can ask for metaserver info. MSW 2005-07-08 lib/settings: Turn of fastclock as default option. socket/loop.c: Change behaviour of metaserver/flushmaps/watchdog calls if fastclock is set - don't do those any faster than normal. MSW 2005-06-22 Server can now be used as a Windows server, with command-line options -regsrv (register server and exit), -unregsrv (unregister server and exit) and -srv (should not be used directly, for the service control manager call). server/init.c: add command-line options. server/main.c: loop is no more infinite under Windows. Save and clean after it, too. server/win32.c: add service routines. Ryo 2005-06-22 common/living.c: Print correct message when (un-)wearing items with negative luck. Andreas Kirschbaum 2005-06-14 include/living.h: Patch from Kari Pahula to remove obsolete variable declarations. Andreas Kirschbaum 2005-06-01 server/skill_util.c: Print correct permanent experience ratio for experience values >2 billion. Andreas Kirschbaum 2005-05-22 server/apply.c: Do not unlock LAMP items when turning them on or off. server/apply.c: Fix CONVERTER items with slaying "money" to trigger for MONEY items only. server/player.c: Generate proper plural name for player's gravestones. Andreas Kirschbaum 2005-05-21 Ensure that object->msg always has a trailing \n character. This is necessary to prevent corrupted map files. plugin/plugin_python.c: Add trailing \n to message set by CFPython.SetMessage() if not already present. server/plugins.c: Add trailing \n to message set by HOOK_TELEPORTOBJECT if not already present. server/rune.c: Add trailing \n to rune messages. Andreas Kirschbaum 2005-05-21 Apply qal21's patch [ #1205421 ]: Implement new Python functions: GetArchType, GetFacing, GetLevel. plugin/plugin_python.c, plugin/include/plugin_python.h: Add new functions. doc/Developers/python: Describe new functions. Andreas Kirschbaum 2005-05-20 server/monster.c: Fix monsters to cast spells from spellbooks. Andreas Kirschbaum 2005-05-15 Fixed compilation issue. server/apply.c: can't declare a variable after some function call. socket/info.c: removed unused variable. Ryo 2005/05/07 Corrected code to compile under -ansi gcc flag: * correction of some non posix compatible calls around scandir * changing configure to detect the absence of 'alphasort' prototype * converted some '//' comment to /**/ one * reran automake1.8/autoconf2.50/autheader2.50 Note even it it compiles with -ansi -pedantic, it still need cleanup to get 64 bits experience code working! Tchize 2005/05/07 Applied Casper1's patch [ #1193516 ] for Hurd support. * socket/lowlevel.c: #ifdef some code part that won't work. Change some char* to const char*, when values shouldn't be changed. Changed files: * include/libproto.h * common/arch.c * common/living.c Ryo 2005-05-03 Change some char* to const char*, when values shouldn't be changed. Changed files: * include/sproto.h * socket/info.c * socket/item.c Ryo 2005-04-30 Change some char* to const char*, when values shouldn't be changed. Changed files: * include/sproto.h * server/apply.c * server/ban.c * server/spell_util.c Ryo 2005-04-27 server/skills.c: Change it so that jeweler skill is used to identify amulets, not alchemy skill. MSW 2005-04-27 Apply patch 1190107 so server compiles on HURD. common/porting.c: Add define for MAXPATHLEN socket/init.c: Add check for __GNU__ for setsockopt() MSW 2005-04-27 Change to have objects generated by creator properly fixed up (material, for potions, spell object, etc). --- common/treasure.c: add GT_MINIMAL flag to change_treasure() to do minimal processing for objects created. include/treasure.h: Add GT_MINIMAL define. server/apply.c: Add call to fix_generated_item() in convert_item() MSW 2005-04-27 Various minor bugfixes. common/los.c: Patch to fix negative lighting. Use isqrt instead of sqrt, so we only want integer values anyways. include/libproto.h, include/sproto.h: Rebuilt as there were some improperly matching prototypes. random_maps/rogue_layout.c: Replace sqrt with isqrt calls. server/c_misc.c: Make name_cmp() a static declaration so it won't be put in the sproto.h file. server/init.c: Remove /* within comment string. server/monster.c: Change sqrt to isqrt MSW 2005-04-16 Those changes are just changing char* to const char* in some function prototypes. Affected files: common/recipe.c common/region.c common/treasure.c common/utils.c include/libproto.h: match headers. server/main.c Ryo 2005-04-16 Those changes add the ability to transform items through 'item_transformer' (163)-type items See doc/Developers/item_transformation for more info. common/item.c: don't display 'slaying' field for food. include/define.h: add new 'ITEM_TRANSFORMER' type. include/sproto.h: add new function 'apply_item_transformer'. server/apply.c: new 'apply_item_transformer' function to handle that item type. Ryo 2005-04-15 common/map.c: map pathnames are now const char*, no reason for something else. common/region.c: remove unused variable. include/libproto.h: update functions definitions. include/sproto.h: weathermap_to_worldmap_corner now returns a const char*. include/win32.h: define missing NAME_MAX as MAX_BUF. server/c_misc.c: remove unused variable. Use const char* when possible. server/weather.c: weathermap_to_worldmap_corner now uses const char* as return type. Ryo 2005-04-14 Random map code improvements - add support for subdirectories in the style maps for random maps. Add difficulty_increase parameter for random maps to control how fast they get harder. doc/Developers/random-maps: Add notes about difficulty_increase parameter. random_maps/Makefile.am: Update proto directive to use cproto, not cextract. random_maps/random_map.c: Update to use difficulty_increase when figuring difficulty of maps. Add code to save it in list of parameters. random_maps/random_map.h: Add difficulty_increase field to structure. random_maps/reader.l, reader.c: Add code to find difficulty_increase parameter. random_maps/rproto.h: rebuilt. random_maps/special.c: Pass in difficulty increase to write_parameters_to_string() random_maps/style.c: Remove old scandir - replaced by our own load_dir() - necessary because we need to check type of files, which scandir doesn't easily let us do. Since it is now our own routine, just return array of file names instead of dirent structures. MSW 2005-04-13 utils/Makefile.am: Add cfmeta-rrd to list of files to add to distributions utils/cfmeta-rrd: Example of sample script that takes data and stores it into rrd file and draws graphs (new file). utils/metaserver.pl.in: Add recording of useful stats to external file so they can be processed by other external scripts. MSW 2005-04-13 server/shop.c: Pass in player object to pay_from_container() - code was trying to deref pouch->contr which was null. Only occurs when player has 2 different money objects of the same type, but 2 crashes observed on metalforge. MSW 2005-04-13 socket/image.c: Change esrv_send_face to check for <=0 instead of <0 on face number. socket/request.c: Change if statement that acted improperly to determine when to send faces. MSW 2005-03-27 include/sproto.h: get_who_escape_code_value is void, not void*. server/c_misc.c: move local function outside the function. server/c_wiz.c: remove sleep( 1 ) that would cause whole server to sleep one sec. Ryo 2005-03-23 common/living.c: Allow luck to drop back to zero. Limit bad luck object to +/-100 to prevent overflows. Andreas Kirschbaum 2005-03-22 common/living.c: When randomly adjusting luck, change both op->stats.luck and the applied bad_luck object. server/attack.c: Do not decrease luck if a player kills himself with a spell or pet. Andreas Kirschbaum 2005-03-20 server/c_wiz.c: change command_free() and command_remove() to always process the head of the object - doing this operations on the non head will typically always cause problems. MSW 2005-03-19 This change makes it so that the smoothing information is pushed to the client (if the client is using smoothing) instead of a process were we tell the client the smoothlevel and the client then has to request the face info for smoothing. If we know the client wants the info, much easier to push it to the client. This simplifies the client code (doesn't have to keep track of what is requests). It also fixes the 'problem' that when you join the game, you get a few frames with no smoothing and then the smoothing shows up, which seems a bit odd. My testing shows that old clients that want smoothing use this new logic withouth any problems. -- common/image.c: add smooth_face default so that we don't have to look it up everytime. include/define.h: Add SMOOTH_FACE_NAME used by image.c include/global.h: Add smooth_face extern declaration. include/newserver.h: Update comment on what faces_sent is used for, add NS_FACESENT_* values which determines what info for the face was sent. socket/image.c, socket/init.c, socket/item.c: Update faces_sent checks/set to check against NS_FACESENT bitmask. socket/request.c: Update faces_sent as mentioned above. And SendSmooth(), rewrite AskSmooth() to use SendSmooth(). Modify update_smooth() to send smoothing information to the client. MSW 2005-03-19 common/map.c: Clean up if statement ins blocked_link() which caused warning messages - broke it apart to make it a little clear. Add check for premature end of map header - make code more resilent in case of truncated saved maps. Fix saving of region name in new_save_map() - saving the pointer to the region isn't what the loader is expecting, and is highly non portable even if it was. MSW 2005-03-18 Applied patch: * #1145089 (cavesomething): Region support. common/Makefile.am: add new 'region.c' file. common/init.c: add 'REGIONS' setting. common/map.c: add 'region' map key. include/config.h: add regions file default name. include/global.h: add 'first_region' global variable and settings. include/libproto.h: add region.c functions prototypes. include/map.h: add region structure. include/sproto.h: add new region-related command. lib/Makefile.am: add 'regions' file. lib/regions (new): regions definition file. server/c_misc.c: add region information to current_map_info. Add new 'whereami' command. server/commands.c: add 'whereami' command. server/init.c: add regions settings, and load data. Ryo 2005-03-15 Applied patches: * #1119366 (salathar): wiz food, DMs don't use food anymore. * #1161816 (cowboyatheart) : Add wands/staves/rods/horns to new pickup. * #1119762 (salathar): afk command. common/loader.[lc]: add 'FLAG_AFK'. include/define.h: add 'PU_MAGIC_DEVICE. Add 'FLAG_AFK'. include/sproto.h: add 'command_afk'. server/c_misc.c: add 'AFK' to who display, add command_afk. server/c_object.c: add new flag to dump. server/commands.c: add command_afk. server/player.c: wiz don't use food. Check for rod/wand/horn for new pickup flag. Ryo 2005-03-13 *Makefile.in, aclocal.m4, configure, utils/config.guess, utils/config.sub, utils/ltmain.sh: Rebuild generated files. acinclude.m4: Check whether Python supports the "L" format specifier. Do not build python plugin if not. Andreas Kirschbaum 2005-03-09 common/{map.c, readable.c, treasure.c}, crossedit/Attr.c, server/{apply.c, attack.c, c_wiz.c, init.c, monster.c, pets.c, shop.c, skill_util.c, skills.c, spell_attack.c, spell_effect.c, time.c}, socket/{info.c, request.c}: Add missing newline character to LOG() messages. common/living.c, include/living.h: Change type of weight_limit to uint32. socket/request.c: Remove non-portable assignment to rvalue. doc/{README_PLUGINS.doc, README_PYTHON.txt, plugins}, doc/Developers/{README, plugins, python}: Update plugin documentation. plugin/plugin_python.c, plugin/include/plugin_python.h: Whitespace changes, remove obsolete comments. plugin/plugin_python.c: Only set WhoAmI when running the command registered by CFPython.RegisterCommand. Set default result value to "success". plugin/plugin_python.c: Fix memory leaks by freeing old strings before assigning a new value. plugin/plugin_python.c: Use correct format specifiers for item values and experience values. plugin/plugin_python.c: Make CFPython.IsCanBePicked return whether the object can be picked up. (Did return whether the object cannot be picked up.) plugin/plugin_python.c: Do not return a pointer to a variable on the stack. server/plugins.c: Fix pointer type mismatch while processing CFPython.RegisterCommand. plugin/plugin_python.c: Change second parameter of CFPython.CheckMap to use a map object instead of a map name. Now it works for tiles maps. acinclude.m4: Add check for python 2.4 to match this file with aclocal.m4. Andreas Kirschbaum 2005-03-06 plugin/plugin_python.c: Increase limits of values the Python script may set to the ranges given by objects in the archetypes file. Andreas Kirschbaum 2005-02-28 common/object.c, include/libproto.h: change nrof parameter of get_split_ob to uint32 type. server/c_object.c, include/sproto.h: change nrof parameter of drop_object to uint32 type. plugin/{plugin_python.c, include/plugin_python.h}, plugin_animator/{plugin_animator.c, include/plugin_animator.h}, server/{apply.c, attack.c, gods.c, monster.c, player.c, skills.c, time.c, timers.c}: Change type of CFParm.Value[5] and StackParm1[] to uint32 to be able to pass an "nrof" value. plugin/plugin_python.c, plugin/include/plugin_python.h: Remove spell wrapper functions. plugin/plugin_python.c, plugin/include/plugin_python.h: Replace skill-IDs by skill names. Remove skill-ID wrapper functions. Andreas Kirschbaum 2005-02-20 ------------------------------------------------------------------------------ Changes for 1.7.0: configure, configure.ac, include/autoconf.h.in: Update for version 1.7.0. Add check for libz - needed by libpng (at least on my system), which is needed for the editor. MSW 2005-01-23 common/object.c: Change CAN_MERGE() from an inline function, since it calls itself and inline functions are not supposed to do that. Update type check in insert_ob_in_map() to check against defined type (EXIT) instead of hardcoded integer value (66). crossedit/xutil.c: Update to just include Defines.h, which then includes all the other necessary files, including global.h. include/global.h: Add #ifdef checks for the UINT*_MAX types, as some systems already define these values, which results in a redefinition error. Also fix up // style comment. include/shstr.h: Include proper cast in TOPBIT definition. server/main.c: Don't display 'xyz left the game' messages if the player is only at the get name or get password prompt. Prevents possible spoofing of that message. server/player.c: Clean up formatting of check_pick() function. If player is using newpickup to pick up booze, also pick up poison unless they know it is cursed. socket/request.c: AskSmooth() - change buffer type to uint8 so that it matches what the SockList structure wants. utils/scores.pl.in: Use skill_praying to find players god, and not the deprecated experience_wis object. MSW 2005-01-23 aclocal.m4, configure: Add check for python 2.4. common/re-cmp.c: Fix improper comparison *(str+1) instead of str+1 server/login.c: don't allow null names. server/main.c: Disable logging of removed objects - filling up log files on archmage of all the errors. server/player.c: Fix improper initialization of attacktype in for loop. Give players max grace, sp when they die - also, if they are near starvation, give them a bunch of food. server/spell_effect.c: Put cap on duration of godly retribution - it can otherwise last so long that if a player is killed by it at their savebed location, spell could still go on after players temporary immunity ends. Retribution as increases in damage, so no need to really increase damage and duration to really high amounts. server/spell_util.c: In fire_arch_from_position(), and check that player isn't casting spell on top of wall - fixes for many spells, including ball lightning. server/time.c: Change comparsion on return of get_map_flags() from == P_OUT_OF_MAP to & P_OUT_OF_MAP - keeps syntax consistent. MSW 2005-01-11 plugin/plugin_python.c, plugin_animator/plugin_animator.c, plugin_animator/plugin_animator.c: Use script return value set by CFPython.SetReturnValue(): access to stack was off by one. Do not return a pointer to a local variable on the stack. plugin/plugin_python.c, plugin_animator/plugin_animator.c: Handle all defined events. Andreas Kirschbaum 2005-01-10 server/spell_attack.c: apply patch #1096921 courtesy Salathar. Charmed monsters now lose the 'generator' flag, to prevent things like mice outbreak in bigworld maps. Ryo 2005-01-07 plugin/plugin_pyhton.c, plugin/include/plugin_python.h: Remove obsolete functions: SetGender, SetRank, SetAlignment, SetGuildForce, GetGuildForce, CreatePlayerForce, CreatePlayerInfo, GetPlayerInfo, GetNextPlayerInfo, SetPreviousObject, SetNextObject. plugin/plugin_python.c, plugin/include/plugin_python.h: Add missing attack type wrapper functions, function CFPython.SetDamned(), wrapper functions for missing cost flags, and wrapper functions for event types. plugin/plugin_python.c: Add an optional parameter to CFPython.SetName() to specify name_pl as well. Always set name_pl. plugin/plugin_python.c: Fix a buffer overflow in CFPython.RegisterCommand(): allocated memory was not sufficient to hold the trailing '\0'. plugin/plugin_python.c: Use #define constants. plugin/include/plugin_python.h, plugin/plugin_python.c, plugin_animator/plugin_animator.c, server/plugins.c: General cleanup - merge duplicate code, remove debugging code, rename variables, rename C function names to match the Python function name, use hook functions where appropriate. include/sproto.h, plugin/plugin_python.c, server/plugins.c, server/shop.c: Use uint64 type for variables holding money. Use Python long integers to pass these variables to/from the Python plugin. Andreas Kirschbaum 2005-01-07 plugin/plugin_python.c: Check values passed in from the Python code; generate proper Python exceptions for invalid values. plugin/plugin_python.c, plugin_animator/plugin_animator.c: Make sure all fields on the stack are initialized. Prevent stack overflow: check was one off, causing a buffer overflow. Decrement stack pointer in error case. Andreas Kirschbaum 2005-01-06. common/regexp.c: Fixed couple flaws in regexp handling. First, there was an off by one error in the handling of matches (if the match was for example eureca, player could just say eurec, and it would treat that as a valid match). Second case was that the regular expression logic would not try comparing the rest of the passed in string after a partial match - In the eureca case above, if the passed in string was 'where is eureca', after matching the first e (in where), it then fails to match the next letter and would give up. It now tries comparing the rest of the passed in string with the regex (so after that failure, it will try to match 're is eureca'. server/apply.c: Add missing 'return 0' to shop_mat code that is needed to prevent unpaid objects from teleporting out of the shop. Also extend code so that non living objects can't use shop mats. server/player.c: Insert force into the player when they die making them immune to any spells on the space they reappear on - this prevents multiple deaths if there is large spell effect going on in the savebed location. Duration of force should be long enough for most spells to run their course, but no so long that the player can use it for much of an advantage (plus, killing yourself to get such an advantage seems odd, and the force only makes the player immune to the attacktypes currently on the space) server/spell_effect.c: Fix spell casting walls (lighting wall, firewall, etc) in that the spell object they cast was not being inserted, resulting in the walls not doing anything. MSW 2004-12-28 Applied patch (bug misc/zoo2) by Lalo server/time.c: creators can now create multi part objects. Applied patch 1086102 by Salathar: server/attack.c: If player kills another player, add (pk) to the death message. Applied patch 1086103 by Salathar: server/move.c: If player pushes another player, send message to both players that pushed happened. Previously, when pushing another player, the pusher wouldn't get any notice. MSW 2004-12-28 Applied patch 1001079 - make alchemy books say what skill & equipment is needed - by Kevin Rudat. common/readable.c: Update code that generates book title, contents to denote what skill and equipment is needed. random_maps/{random_map.c, reader.l, reader.c}, server/main.c: Remove generate_treasure_now as an option for random maps - none are using delayed treasure, and IMO, if someone did, it would horribly break things, so it should never be used - given that, no reason to leave the code there. server/main.c: Add additional debugging for process events on removed objects - trying to track down occasional disease crash. server/time.c: Fix crash in move_player_mover() - it was never map tile aware, but even more so, appears to have always been broken if the player move tried to push the player off the edge of a map. Check for out of map condition, as well as make it map tile aware. MSW 2004-12-28 Applied patches #1086095 and 1088385 courtesy Salathar: common/map.c: hidden DM is non blocking server/c_chat: can't do emotions towards hidden DMs. Player's emotions always displayed in split window. server/c_wiz.c: add an extra player leave message when DM hides server/main.c: don't display leave messages for hidden DM when connection timeout server/c_party.c: party password max length is 7, due to buffer size. (i think it was a patch from Casper?) Ryo 2004-12-25 server/c_wiz.c: Remove item when 'free' by DM if not removed, avoiding crash. Ryo 2004-12-22 server/c_party.c: Make party passwords of 8 characters work, disallow longer passwords. Based on patch #1080096 from Casper. Correct help message for party commands. Andreas Kirschbaum 2004-12-10 plugin/plugin_python.c: change 'long long' so 'sint64' (typedef). Ryo Saeba 2004-11-29 common/object.c: apply patch #1066665 courtesy Salathar for exits with blockview 1. lib/formulae: apply patch #1064643 courtesy Salathar to fix broken formulae. lib/wizhelp/speed: remove file, command changed name. lib/wizhelp/server_speed: updated 'speed' command help. server/c_wiz.c: apply patch #1063051 courtesy Salathar to update muzzle message. server/commands.c: apply patch #1052224 courtesy Casper to change 'speed' to 'server_speed' as name is ambiguous. Ryo Saeba 2004-11-25 common/loader.l: Fix passed size in FAST_SAVE_LONG() - was one too long, causing truncated diffs after "dam_modifier" entry. Andreas Kirschbaum 2004-11-15 This commit adds the functionality of patch 991916, although the patch as submitted was used as a baseline to start from. include/sproto.h: rebuilt server/c_chat.c: Rename command_chat() to command_tell_all() which takes a few more optional parameters. Add command_shout() and command_chat() that invoke command_tell_all() with the appropriate changes. server/commands.c: Add chat to list of command table. MSW 2004-11-08 plugin/plugin_python.c: Run the script python_init.py right after initializing the interpreter. Andreas Kirschbaum 2004-10-21 server/c_party.c: actually warn party members of password change. Notify when someone joins party. Ryo 2004-10-21 plugin/plugin_python.c, plugin/include/plugin_python.h, server/plugins.c: Fix comments, change whitespace. Andreas Kirschbaum 2004-10-19 Fix some bugs I introduced in my last commit. common/map.c: Add back in call to sum_weight that got removed when removing the object checking code. common/treasure.c: Have fix_generated_item() blank out the randomitems field after it has created treasure. server/apply.c: Only clear randomitems after create_treasure() - don't presume it should get blanked out for other reasons - with change to treasure.c above, this should be more reliable and fix starting skill issue, as randomitems was getting blanked out for CLASS object. server/main.c: Change processing of players a little - found crash where autosave was called for a removed player (map had got swapped out) - don't do autosave logic if player is removed. Move the autosave code to after the players action, so that can just have a single check of removed status. MSW 2004-10-17 include/sproto.h, server/egoitem.c: Change create_artifact() to return whether the artifact was created. server/plugins.c: Change CFWCreateArtifact()/HOOK_CREATEARTIFACT to return whether the artifact was created. plugin/plugin_python.c: Define new function create_object() to create objects. Use this function to fix CFPython.CreateObjectInside() and CFPython.CreateObject(): creation of artifacts does work now. plugin/plugin_python.c: Fix CFPython.GetNextPlayerInfo() to work with long force names. Remove duplicate variable initialization. server/plugins.c: Remove the use of malloc() in initOnePlugin(). Andreas Kirschbaum 2004-10-18 plugin/plugin_python.c, plugin_animator/animator_box.c, plugin_animator/plugin_animator.c, plugin_logger/arena.c, plugin_logger/plugin_logger.c: Use HOOK_FREEMEMORY to free memory allocated by HOOK-functions. Fix memory leaks. plugin/plugin_python.c, server/plugin.c, plugin_animator/animator_box.c: Fix some more mismatches between plugin interface and implementation. CFPython.Get/SetSkillExperience() use 64-bit exp values now. CFPython.CastAbility() works again. Andreas Kirschbaum 2004-10-16 plugin/plugin_python.c, server/plugin.c: Fix type mismatches between plugin interface and implementation. plugin/plugin_python.c, server/plugin.c: Add/remove "static" to/from some variables. Fixes a memory leak in CFPython.SaveObject(). plugin/plugin_python.c: Fix reference counting for Python objects. Andreas Kirschbaum 2004-10-15 common/living.c: Fix exp functions to use the player objects expmul value when determining level gains, and not the skills. Also, fix bug where players last hp/sp/grace gain I think was being re-rolled when player gained level in skill. common/loader.l, loader.c: Add better recording of non existant objects (no archetype for them) in maps. Also, handle such objects in players inventories properly (which is to just discard them) common/map.c: Add better logging about discarded archetypes. Since the loader now deals with objects without archs in inventories, that code doesn't need to be in the server. common/object.c: copy_object() was not properly nulling out the next field in the event object, pointer to event list was also incorrect, causing events to not be copied properly. doc/spoiler-html/spoiler.html: Rebuilt. server/apply.c: Apply patch by MT that fixes problem of entire inventory not being copied properly. Fix problem that objects in creatures were not having any sub treasure created (eg, put a pyro_book in a monster on the map, and the pyro_book wouldn't have a spell in it) - now we make sure we process inventory objects as well as map objects, creating treasure as needed. server/monster.c: Reverse order of cast_spell() and drain_rod() in monster_use_range() - drain_rod() should go first, because case_spell() can in rare cases destroy the rod. MSW 2004-10-14 server/c_misc.c: Add natural skin resistances to 'statistics' output for dragon players. Ryo 2004-10-10 common/readable.c: Apply patch by Kevin Rudat to add some alchemy book names. common/readable.c: Apply patch by Kevin Rudat to fix buffer overrun while generating book titles. Andreas Kirschbaum 2004-10-09 include/sproto.h: Add function prototype. server/c_wiz.c: Add 'command_stack_clear' to clear DM item stack. server/commands.c: Link function to function array. Ryo 2004-09-26 server/player.c: Allow to 'reply' to players that logged out but did not yet drop the connection. Now reply works like other communication commands. common/utils.c: Fix random_roll() and die_roll() to not return out of range values. include/define.h: Add parentheses around arguments of FABS macro. Andreas Kirschbaum 2004-09-19 server/rune.c: Prevent creation of level 0 runes. Re-enable runes to cast multiple spells. Andreas Kirschbaum 2004-09-14 include/config.h: fix Win32 log path so there actually is a log. plugin/plugin_python.c: uint doesn't exist under Win32, use uint32 instead. Patches from tracker, courtesy Kurtat: patch 1022942: Random documentation updates doc/SurvivalGuide doc/Developers/programming_guide doc/Developers/protocol lib/settings lib/help/cast patch 1022973: Words for numbers in spellbook description server/c_object Ryo 2004-09-12 server/attack.c: Pass in skill (string) to change_exp instead of skop->skill - skop can be null, resulting in a crash here. In addition, other calls to change_exp in this function use the skill string, so it is good to be consistent. MSW 2004-09-09 server/c_wiz.c: Don't forget to skip blanks after reading item number or stack position. Works better for commands like patch :) Ryo 2004-09-06 common/object.c: Fix insert_ob_in_map so right coordinates and map value are used on GET_MAP_OB call - was using values before changes for tiling were applied. MSW 2004-09-02 server/player.c: allow to 'talk' to players with ambiguous names: use a perfect match even if other partial matches exist. Andreas Kirschbaum 2004-08-30 include/define.h server/shop.c add new flags F_IDENTIFIED and F_NOT_CURSED to query_cost() to pretend the item to be identified/not cursed or damned. server/alchemy.c fix possible abuse of shadow alchemy: do not allow the generated items to be more valuable than the ingredients when using alternate recipes. Andreas Kirschbaum 2004-08-24 common/map.c: Add extra check to make sure variable is set before calling strcmp - this can happen if the map file that is being loaded is 0 bytes - without this, the server would crash. MSW 2004-08-23 server/disease.c: fix crash when casting diseases on tiled maps. server/move.c: fix problem with multi-tile monsters and pass thru walls. server/spell_effect.c: fix magic walls sometimes appearing in wrong place. Andreas Kirschbaum 2004-08-20 common/loader.l, loader.c: in check_loaded_object() - don't give spell objects inventory if we are in the arch_init phase. When loading objects in common loader routine, if object doesn't have arch, set the object name to the arch name so that it is more meaningful than 'singularity'. common/map.c: If object has inventory, check to make sure the inventory objects have an archetype set - if not, remove and free the object - objects without archetypes causes crashes. MSW 2004-08-17 server/apply.c: fix_auto_apply() - add some debugging statements, as I've seen crashes caused by monsters with scrolls with no spells - need to figure out how those are showing up. server/c_wiz.c: command_kick() - fix occasional crashes when player isn't on any map when kicked. command_create() largely rewritten so it doesn't crash the server on any malformed values passed in, add some more features so it should be easier to create objects. MSW 2004-08-16 server/apply.c: better to not create a treasure for spellbooks that already have something in inventory. Else you get 2 spells in the book, which then mutates when loading (first spell is the book's spell, and order changes every load/save...) Ryo 2004-08-16 Those changes mostly add an item stack for DMs. It makes it easier to dump & patch & manipulate items without having to copy numbers all the time. Basically, you can use '$x', meaning item at position x on stack. Or even omit argument, defaulting to stack top. When using an object number, it gets stacked automatically (up to 50 items). Also add a 'diff' command, letting the DM see the result of 'get_ob_diff' on items, to spot differences easily. common/player.c: free item stack when freeing player structure. include/player.h: add item stack to player structure. include/sproto.h: new functions for stack. include/win32.h: missed commit for 1.6.1 version. server/c_misc.c: push item dumped with 'deumpbelow' on dm stack. server/c_wiz.c: add stack functions. Use'em on patch, create, remove, free, and such. Add 'diff' command. server/commands.c: add new stack & diff commands. Ryo 2004-08-15 server/spell_attack.c: fix mood_change when spell has no attacktype. In this case, do a specific saving throw, to ensure a level 1 player can't charm a level 125 monster. Ryo 2004-08-14 random_maps/exit.c random_maps/random_map.c random_maps/random_map.h random_maps/reader.l random_maps/rproto.h random_maps/special.c random_maps/wall.c added fix for random maps with single arch walls, added level indicator on random map signs added new parameter 'exit_on_final_map'- see documentation TM 2004-08-07 include/plugin.h plugin/plugin_python.c server/c_wiz.c server/plugins.c add event hooks for Kick and Muzzle(toggle_shout) commands. fix CFSetQuantity by changing the int to uint and remove 100000 item limit. pythonplug now looks for event scripts in maps/python/events. TM 2004-08-02 server/skills.c: xp for writing is now multiplied by skill level, to make it possible to level. Ryo 2004-07-17 common/loader.c: add #ifndef for non-existant Win32 header include/win32.h: #define vsnprintf _vsnprintf to fix linking issue Ryo 2004-07-03 server/skill_util.c: Fix skills command so that it properly displays percentage of permanent exp. server/time.c: Modify move_arrow() so that it removes thrown objects with no inventory. MSW 2004-06-22 socket/info.c: Replace sprintf() calls with snprintf() - got metalforge crash with apparent buffer overun - going to snprintf should prevent the problem in the future. MSW 2004-06-21 server/c_wiz.c: for command_create() - check to see if 'of' parameter is a spell archetype name, and do the right thing if it is. This allows things like 'create rod_heavy of spell_large_lightning'. Note that the command_create is still a seriously broken function in many regards. server/rune.c: Fix write_rune() when trying to find the spell in encase in the rune - assignment was incorrect, so it always took the last matching spell in the players inventory, not the best matching spell. server/spell_util.c: Change the call to prayer_failure() so that its potency is based on how badly short the player is short of grace. Eg, if only 1 point short, potency of 1. This changes from before where the potency was always the difference in mana. MSW 2004-06-17 server/attack.c: Fix hit_with_arrow() so that it uses the proper map when inserting the arrow. server/c_wiz.c: Add note about brokeness of command_create() server/spell_effect.c: execute_word_of_recall() - don't attempt recall if player isn't on any map. MSW 2004-06-15 common/object.c include/define.h include/player.h include/sproto.h server/attack.c server/c_object.c server/player.c server/shop.c socket/item.c socket/loop.c socket/request.c: Remove explicit calls to esrv_update_item(UPD_WEIGHT, pl, pl) for player objects. Instead send the new weight whenever it changes. Andreas Kirschbaum 2004-06-13 server/spell_attack.c: cast_destruction() - have it change the skill for the caster so that exp is properly awarded. common/object.c: insert_map_in_ob() - remove CAN_MERGE checks after the map translation - otherwise, we can have bogus coordinates that are used for GET_MAP_OB. random_maps/style.c: pick_random_object() - have it return null object (and probably crash) instead of getting into an infinite loop. server/c_wiz.c: command_kick() - check FLAG_FREED of player. Remove all the broken skill/exp object granting code in command_possess() - this is probably still a broken function. common/item.c: describe_monster() - if the creature/player is stealthy, mention it when the object is described. common/loader.l, loader.c: Fix passed in size to get_ob_diff() - was one to long, causing string corruption. server/spell_attack.c: mood_change() - fix get_map_ob call - wasn't using correct coordinate variables, resulting in crash. MSW 2004-06-10 server/c_party.c: gsay improvements, courtesy Katia. Ryo 2004-06-09 server/commands.c: Disable 'possess', that crashes server. server/monster.c: Make monsters use wands/horns/... again. Also make'em ignore DMs all the time (even when not invisible). server/skill_util.c: Fix the change_skill when called for monsters. Ryo 2004-06-06 server/c_misc.c: Add sum_weight() call to fix_me command so that players weight is properly recalculated. server/skills.c: Fix up attempt_steal() so that it doesn't improperly remove object from target when person doing the stealing can't pick it up. server/spell_attack.c: Set maxhp properly, so multipled fireballs, etc can be going off at the same time. server/spell_effect.c: Fix up cast_create_missile() so more esoteric missiles can be created. MSW 2004-05-31 include/sproto.h: new 'dmhide' command. server/commands.c: new 'dmhide' command. server/c_wiz.c: added 'dmhide' command. Player becomes DM, and 'hide's immediately. Others only see him/her leave the game, they don't know s/he's DM. Ryo 2004-05-24 include/book.h: Increase the size of BOOK_BUF, so inscribed books can hold more informatin. lib/Makefile.am, lib/Makefile.in: Add the 'rename' to the list of help files. lib/archetypes: update the glyph/rune spells to have proper face. lib/bmaps, lib/crossfire.* - add glyph.111 image. server/gods.c: Modify tailor_god_spell() to look harder to find a god - necessary for glyph spells. server/spell_attack.c: Give players 50% of exp for monsters they charm. MSW 2004-05-19 common/object.c: Correct get_search_arr() to return a proper permutation. Andreas Kirschbaum 2004-05-18 server/main.c: Have process_events display information from dumped object. also, more refinement on checking of object status. MSW 2004-05-16 server/build_map.c: change 'player' variable to 'pl', since a player structure already exists. Also fix disappearing pedestals on non-unique maps (put'em over floor, they are visible but hey, can't have everything :p) server/c_wiz.c: fix learn_spell. Ryo 2004-05-16 server/main.c: freeing removed objects appeared to have more of a consequence than expected - only remove the object if it was on a map (op->map). It turns out that the artifact code uses objects that are removed to store what the new object is. server/spell_effect.c: Fix cast_create_food() to call find_archetype_by_object_name() instead of find_archetype(). In this way, players can use invoke without having to know the archetype name. server/c_wiz.c: Modify command_banish() to record dm name, player name, and date of command. server/acinclude.m4: Patch by acinclude.m4 to add python 2.3 support. Rebuilt files (Makefile.in, aclocal.m4, configure, configure.in). add config.guess, config.sub since automake now includes them in the Makefile.in file. MSW 2004-05-15 Added a new item type: ground positioning system (GPS). This lets a player know his/her location in the world. Only works in 'world_xxx_xxx' maps. include/define.h: add new item type, 'GPS' (162). include/sproto.h: add new function, 'apply_positioning_system'. server/apply.c: handle new item type. Ryo 2004-05-15 server/spell_util.c: SP_level_spellpoint_cost() - never have a spell cost 0 spellpoints due to attunement or other bonuses - spell always cost at least 1 sp/grace. server/main.c: Fix process_events() so it doesn't purge removed players from the list - players get in the removed state at play again prompt. server/apply.c: Fix fix_auto_apply() so we don't generate additional spells for spellcasting objects that already have them (regression from fix from 5/11 below) MSW 2004-05-13 server/pets.c: Fix summon golem, summon pet monsters so that the summoned monsters are not worth any exp. Fixes bugs were players could summon monsters and then kill them. server/skills.c: Fix do_skill_detect_curse() and do_skill_detect_magic() so that they don't process objects the player is incapable of picking up (eg, floors). Fixes experience exploit. server/apply.c: modify fix_auto_apply() so that it properly generates items for creatures that start with objects in their inventory. MSW 2004-05-11 server/spell_util.c: Fix cast_spell() so that failed spells (due to encumberance or other penalties) still cost some random number of grace/ mana points. MSW 2004-05-10 common/treasure.c: Change the loading of the artifacts file to actually calloc() the object - reset_object() doesn't clear all the values, like active_next, active_prev, so better to just do it there. server/main.c: Add code in process_events() that checks for removed objects - have seen occasional crashes caused by them. MSW 2004-05-08 Armor enchantment now uses setting values. common/init.c: new values to init in settings. include/global.h: new setting values. include/config.h: new default values for settings. lib/settings: explanation for those new values. server/apply.c: change armor improvement code to use setting values. server/init.c: read new settings. Ryo 2004-05-08 common/init.c: there's a #define LOGFILE, use it instead of hardcoded value. include/config.h: change default logfile path to previous value in init.c. server/c_wiz.c: Fix 'nodm' displaying incorrect messages, and forgetting to update player count on map. Ryo 2004-05-08 server/apply.c: Fix apply_special() to properly deal with LAMP objects - it wasn't dealing properly with the split off lamp compared to the one it was supposed to deal with - was crashing server. MSW 2004-05-04 common/item.c: describe_monster() - print luck when describing players (fixex perceive self not showing luck) server/attack.c: kill_object() - don't give player exp if he kills himself - compare owner against what was killed, not the hitter. server/pets.c: summon_object() - move breaking out for last treasurelist after we set the last valid treasurelist - otherwise, the list entry for the treasurelist was never used. Change summoned creatures so that the items they have are god given, and thus disappear when they are killed - prevents players from summoning and then looting their pets. server/spell_attack.c: explode_bullet() - Get owner of the spell so that we can properly tailor the explosion portion of the spell for the god of the worshipper. MSW 2004-05-03 server/shop.c: patch from Andreas Kirschbaum for Windows compilation. server/spell_effect.c: patch from Andreas Kirschbaum for Windows compilation. Ryo 2004-05-03 common/porting: changed open_and_uncompress to use const char* instead of char*, since value shouldn't be changed (and isn't). include/libproto.h: changed prototype for open_and_uncompress Ryo 2004-04-28 ------------------------------------------------------------------------------ Changes for 1.6.0: configure, Makefiles: Rebuilt for 1.6.0 release doc/*/Makefile.am: Modified to use one makeps.pl utility in scripts directory. doc/scripts/makeps.pl: Make this the definitive copy - fix problem with it trying to combine big images when it doesn't need to. Remove other copies. doc/playbook/chap1.tex, doc/playbook/chap5.tex: Fix some obvious errors, but overall, the playbook is still quite out of date. doc/playbook/treas2-extract: Have it not include abilities in given items, have it properly deal with multiple underscores in arch names. doc/spoiler-html/spoiler.html, doc/spoiler.ps: Rebuilt MSW 2004-04-26 server/apply.c: apply_savebed() - make call to terminate_all pets before call to remove_ob() so that pets are properly removed. common/item.c, server/c_object.c: Fix code so that skill tools (talismans, holy symbols, etc) are properly describe. Clean up formatting of long_desc() MSW 2004-04-25 Change most shop buy/sell functions to use 64 bit values. Problem arises where player would sell valuable item, and if they wanted to buy them back, it would overflow a 32 bit value, so they could buy them back for free. Note quite as odd when you consider the buy/sell price for really valuable items to be very different. include/global.h: Add UINT32_MAX and other max type defines for our typedef values so that we have standard setting of what the cap is. server/apply.c: Change get_payment call to take second argument. server/plugins.c: Add note about bug in handling of query_cost in this function. server/shop.c: query_cost() now returns 64 bit. Many other functions updated to also take/return 64 bit cost values. Have cost_string nicely deal with values that are beyond affordability. Rename get_payment2() to get_payment(), and remove the later, which was just a simple wrapper function that called get_payment2. server/spell_effect.c: Update alchemy code. Remove some suspect use of static values. MSW 2004-04-24 server/apply.c: fix check_weapon_power() so it operates on overall character level and not skill level - this matches up what the out of skills displays. MSW 2004-04-20 common/button.c: Patch by Bernd Edler to have proper speed set for items activated by buttons. server/apply.c: Apply the 'special prayer' marker stuff, since it wasn't used anymore. server/gods.c: Check for FLAG_EQUIP on spells and not for a special prayer marker to guess if a spell is a god given spell or not. server/spell_util.c: Patch by Bernd Edler so that firewalls are immune to casting time. MSW 2004-04-17 server/shop.c: Decrease adjustment limit for expensive items to 10000 to get a continuous adjustment function. That is you will get much less when selling items with a value between 800pp and 2000pp. Andreas Kirschbaum 2004-04-16 common/map.c: Change blocked_link() to take a map parameter. Also, change code in blocked_link() to assume that the caller has set up appropriate map and coordinates related to tiling (in all functions that currently call blocked_link, this is the case) include/libproto.h: Rebuilt. server/move.c, server/player.c: update call to blocked_link to include the map. MSW 2004-04-15 common/object.c: Change CAN_MERGE() so that it compares the stats structure of the objects being merged. Fixes problems of rings improperly merging with other rings that have different stat values. server/monster.c: Modify check_earthwalls() and check_doors() to take a map structure as an option parameter, and use that structure when calling get_map_ob. Fixes a crash in cases where earthwalls/doors were at the edge of a tiled map, and creature was on other map moving into it. server/move.c: Change move_ob() to adjust coordinates for tiling, and pass in these adjusted coordinages (and map) to the check_() functions in monster.c random_maps/treasure.c: Apply patch by Andreas Kirschbaum so that it does more work in trying to place keys on maps. MSW 2004-04-13 common/living.c: Patch by Bernd Edler to remove cap on exp for players. MSW 2004-04-09 common/item.c: If potion wasn't given a random spell, use the archetype name when it is identified. common/treasure.c: Fix potion codes so that healing and magic power potions get the proper spell inserted into them. Also fix line termination issue. server/skill_util.c: Add check in skill_attack() to make sure current_weapon is not null - there has been some crashes here, but I can't figure out how it gets to this state, so better to at least handle it. MSW 2004-04-07 server/player.c: In flee_player(), make sure the enemy to the player is on an actual map - fixes crashes. MSW 2004-04-06 common/potion.c: Fix up change_abil() to more properly deal with potions - characters could get 0 stat values. Also, messages were not being properly displayed. Patch is slightly modified from one sent in by Bernd Edler. MSW 2004-04-05 server/main.c: Add extra checking for valid map coordinates after we grab them from the destination map itself - if a map is broken and has default enter_ coordinates outside the maps range, this previously resulted in a crash. server/pets.c: Pass the correct map object into insert_ob_in_map(). MSW 2004-04-03 server/monster.c: fixed wiz's hidden mode not working on monsters. Ryo 2004-03-28 common/porting.c include/libproto.h include/win32.h: added 'const' specifier to str-related functions. Ryo 2004-03-26 common/exp.c common/living.c common/loader.[cl] common/porting.c server/c_misc.c server/c_wiz.c server/hiscore.c server/resurrection.c: fixed %lld to %I64d for Windows. Ryo 2004-03-26 server/attack.c: Add scare_creature() function, which sets FLAG_SCARED and also sets up appropriate enemy. Clean up some formatting in other functions, and fix friendly fire - move it out of the loop for all attacktypes (can be after we have figured out max damage). Also, has a bug where if an attach wasn't doing any damage, friendly fire could actually make it do damage (eg, fear spell). server/player.c: Fix up flee_player() to be map tile aware. Also, add call to flee_player() in handle_newcs_player() so player will run away. MSW 2004-03-24 server/attack.c: Add missing skill=NULL in kill_object() - can be rare cases where the proper skill can't be found. server/move.c: Fix push_object() so that it also updates the pushers/ pushees map - should only happen in tiled map cases. server/pets.c: Fix summon_object() so that if a summon cult monsters was cast, we try to find the god from the owner. If still can't find the god, just return instead of crashing. server/rune.c: Change trap_disarm() to call destroy_object() on the trap object, so that all the trapss inventory is also destroyed and not dumped on the ground. server/skills.c: Only players without arms to steal. server/spell_util.c: Change cast_spell to set up the skill pointer for the caster even if the caster is the wizard. MSW 2004-03-22 server/treasure.c: patch from Bernd Edler to enable multiple 'allowed' lines in artifacts. Ryo 2004-03-12 Those fixes make DMs more 'stealthy' (when hiding/unhiding). Also use yet unused colors for player join/leave, and DM join/leave. This way those messages appear in a different window in split window mode, to make the messages easier to spot. server/apply.c: change color for player leave message. server/c_misc.c: let DMs see hidden DMs. server/c_wiz.c: make DMs more stealthy. server/login.c: change color for player joining message. server/main.c: change color for player joining/exiting message. Ryo 2004-03-12 common/item.c: Fixed calc_item_power() to return valid item power for items with high enchantments. Andreas Kirschbaum 2004-03-07 server/spell_effect.c: small patch by Karla Stenger to put player's name in the 'race' field of marking runes. This way, a DM can know who wrote a rune, in case it has some bad vocabulary :) Ryo 2004-03-06 server/spell_attack.c: change check_cone_push function to use arch weights. move function up for resuability and change to check_spell_knockback include/sproto.h: change function name TM 2004-02-28 common/image.c: removed unused variables. common/item.c: conditionally remove unused variables. common/map.c: conditionally define variables, unused under Windows. include/global.h: turned off a conversion warning under Windows. Ryo 2004-02-28 common/living.c: changed 'signed char' to 'sint8' for set|get|change_attr_value. common/map.c: map size is sint16, for arch_blocked. include/libproto.h: update prototypes for set|get|change_attr_value and arch_blocked. random_maps/rproto.h: changed prototype for surround_flag3. random_maps/wall.c: changed surround_flag3 to use sint16 instead of int for map coordinates. server/apply.c: attribute values are sint8 in eat_special_food and apply_changes_to_player. Some explicit casts. server/player.c: map coordinates are sint16, in hideability. server/spell_attack.c: map coordinates are sint16, not int. server/spell_effect.c: stats are sint8 in cast_change_ability. Map coordinates are sint16 in move_aura. server/time.c: generate_monster doesn't return a value. Ryo 2004-02-27 common/living.c: Have give_skill_by_name() update the skill pointers in the player object. server/spell_attack.c: Properly set maxhp in the cone spell - this is used in ok_to_put_more() to make sure one spell doesn't hit a single space too many times. MSW 2004-02-23 common/object.c: Change CAN_MERGE() so that we never merge applied objects - whether or not they are rings. lib/*: different spell for dragons vs players for firebreath - update treasures so monsters use ability version. server/gods.c: Add missing call to link_player_skills(), resulting in players having multiple praying skills. server/skill_util.c: Change learn_skill() so we don't create a skill pointer for the player if they didn't learn the skill (even if they can't use such a created skill, it is still a bit confusing). Fix finding of hand to hand skills to make sure the player can in fact use the skill in question. server/spell_attack.c: Fix cast_cone() so that it properly hits all directions. MSW 2004-02-22 include/define.h,server/shop.c: Apply patch by Bernd Edler that gives bargaining experience based on the amount of money a character saves. Higher the bargaining skill, the more money they can save. MSW 2004-02-16 doc/Developers/spells: Update type on casting_time - include suggested value for times so that results are hopefully more coherent. lib/archetypes, treasures.bld: rebuilt. lib/treasures: Change some of the 'spelldirect' types to just the actual spells, so that two seperate archs don't have to be maintained. server/c_wiz.c: Add some basic sanity checking to command_remove() so that we don't unnecessarily crash. server/skills.c: write_scroll() - have it reset value of the scroll so that the scrolls so inscribed by players have better chance of merging. server/spell_attack.c: cast_cone() - if the caster is a trap, have it hit the center space, so that characters who detonate cone traps will get hit by the effects. Also, reduce range of cone spells if they are going in all directions, compared to being targetted in a speciifc direction. server/spell_util.c: cast_spell() - put lower limit on player speed_left value when casting spells - since higher up the calling stack, the player speed is also reduced, we need to set the lower limit here so that the player isn't out of action longer than they should be. MSW 2004-02-16 include/map.h: removed unused fields from wmapdef.. include/object.h: removed unused field from object.h. Changed glow_radius to sint8 to be coherent with struct MapSpace. include/player.h: removed unused fields from player structure. server/apply.c: removed unused known_spell field. Ryo 2004-02-16 common/object.c: change get_owner() so that it also returns no valid owner if the owner is removed. This fixes a crash if a player quits but is still sitting at the play again prompt when something he owns kills something. server/skill_util.c: Fix show_skills() so that if the character has too many skills for whatever reason, we don't crash, and instead print an error to the player. server/spell_attack.c: Fix typo - not sure actual effect, but probably nothing good. '+ +' should just have been '+' MSW 2004-02-12 common/Makefile.am: Clean up proto - lex seems to toss some new symbols in now days. common/map.c, common/object.c, server/player.c, socket/item.c, socket/request.c: change parameters of get_map_from_coord from int to sint16, so the op->x,op->y can get passed directly in. Update callers of this function. lib/archetypes: Add damned 1 to the shop floors. server/pets.c: Fix problem with big (multisquare) pets following the owner across tiled map boundaries. socket/item.c: Fix problem of players being able to see everything within containers by just looking at them. MSW 2004-02-10 common/treasure.c: add_abilities(): For potions and horns (spell casting objects) convert the other_arch into a spell and put into the object - otherwise, the spell casting object casts the wrong spell. common/object.c: Clean up formatting of copy_object. Only real code change is to fix events - copied event data wasn't getting malloc'd, and thus when another object of that event was freed, it freed the event data for all objects derived from it. common/treasure.c: Fix fix_generated_item() so that books generated by monsters with no_pick set don't inherit that for the book itself. Still do it for other objects of the creator type. MSW 2004-02-08 server/c_object.c: fixed sack_can_hold for the 'won't fit' cast, missing 'return 0' server/gods.c: applied Karla Stenger's patch, making sure 'praying' is applied when becoming fellower of a god Ryo 2004-02-08 Changed map-building to work on non-unique maps too. server/build_map.c: removed check for unique map. Ryo 2004-01-19 Added map-building code. This lets players change unique maps, adding & removing walls, doors, stuff like that. New item types BUILDER & MATERIAL. New item flag FLAG_IS_BUILDABLE. New range attack (builder). ---- Changelog: change prescribed date format to be coherent with usage :) common/loader.l: added 'is_buildable' flag. include/define.h: added defines for item types & subtypes, and item flag. include/player.h: new range type 'builder'. include/spropo.h: new function apply_map_builder. server/apply.c: handle new range type. server/build_map.c: new file, handles all build-related code. server/c_object.c: added 'buildable item' to examine function. server/Makefile.am: added build_map.c to compilation. server/player.c: handle new range type. socket/info.c: handle new range type. Ryo 2004-01-18 Fix a crash related to plugin hooks common/object.c: clear_object(): object's event's hook/plugin/options are initialized with FREE_AND_COPY, so they are shared strings. Better to release'em with FREE_AND_CLEAR_STR instead of FREE_AND_CLEAR, else nice crashes... Ryo 2004-01-16 Fix writing not inserting correctly item in inventory, and Windows- specific stuff too server/skills.c: write_scroll(): Better to insert spell in scroll, and not the other way around server/skill_util.c: fix Windows-specific int64 stuff. Changelog: fix Mark's 2003 to 2004 :) Ryo 2004-01-16 Fix a bunch of crashes observed on metalforge: server/player.c: do_hidden_move(): Move call to find skill so that it is always called. server/skills.c: write_scroll(): Fix freeing of spell object in scroll - newscroll->inv isn't valid after calling remove_ob, so need to copy object to temporary pointer first. server/spell_effect.c: cast_detection(): Pass in skill to use. If no skill in use, use the caster object - fixes pointer derefence as op->chosen_skill wasn't always set. server/spell_util.c: modify caster_level() to always return at least 1. Fixes pointer potential divide by zero problems - also guarantees that players will be able to cast first level spells even if repelled to that spellpath. ok_to_put_more() - Fix to use correct map pointer variable. find_target_for_friendly_spell() - make it so it handles tiled maps OK. MSW 2004-01-15 common/object.c: fix the monsters on tiled maps bug that I may have mentioned a while ago. Seems that the server assumed that all parts of a multi part monster are on the same map as the head while moving. DVS 2004-01-12 common/living.c: fix fix_player() so that character gets benefits/penalties for sp/hp/grace/etc regen bonuses as related to the god they worship. server/player.c: dragon_ability_gain(): Modify so that character now gets attacktype of new ability that they gain. Also, add code so that the characters face/animation can change (getting set to values the bonus ability). MSW 2003-12-27 common/object.c: Set op->events=NULL in reset_object(), and move the clearing of the op->events structure to be before the memset in clear_object() - this was otherwise resulting in a memory leak, as memset would clear the pointer without actually freeing the data. server/attack.c: Fix indentation of hit_map(), modify it so that attacks won't destroy items with no_pass set. server/login.c: set op->speed=0, call update_ob_speed() before calling reset_object() - fixes problem with players not moving with recent changes to initting the active lists to NULL. msw 2003-12-20 server/skills.c: changed NDI_UNIQUE to NDI_BLACK for the meditation message (so that messages can correctly be grouped, also makes it coherent with praying). Ryo 2003-12-20 Those fixes deal with gcc3.3 infinite loop. Fixes (except sizeof/memset) courtesy Bernd Edler. --- common/item.c: use right buffer size for safe_strcat. common/object.c: clear active_next and active_prev when cleaning an object. include/define.h: fixed *curlen=maxlen-1; instead of *curlen=maxlen=1; socket/init.c: initialize whole ns->inbuf.buf, instead of setting first element only to 0. Also allocated with a sizeof( unsigned char ) * size, in case size changes one day. And initialize some more fields. Ryo 2003-12-18 Those changes deal only with warning cleaning under Windows. Mostly, using the right type at the right place, or doing explicit casts. --- common/object.c: changed free_arr_[xy] to short[] instead of int[]. include/global.h: changed free_arr_[xy] to short[] instead of int[]. Changed Windows-specific comments to C-style comments, not C++-style. include/sockproto.h: play_sound_player_only takes sint8, not int, for coordinates. play_sound_map takes a short for the sound number. socket/image.c: some type fixing, explicit casts. socket/init.c: Windows-specific type fixing. socket/lowlevel.c: explicit casts to char for SockList_AddInt64 socket/request.c: fixed types to match function parameters, or added explicit casts when needed. socket/sound.c: play_sound_player_only takes sint8, not int, for coordinates. play_sound_map takes a short for the sound number. Ryo 2003-12-14 server/rune.c: Fix it so that players won't be hit by traps if they are not next to them when set off (firing arrows at a door for example). server/spell_util.c: Fix spell_failure() to properly damage player if they fumble. Fix cast_spell() to not complain about not having enough grace if the spell doesn't take grace. Add same check for mana, but that is much less likely, as harder to get negative mana. socket/request.c: Fix problem where map sending code was not properly avoiding duplicating the head of a big image on multiple layers. This bug most often manifested itself of player standing on lower right corner of large building, and something else standing on other portion of building - player would seem to disappear. MSW 2003-11-30 lib/adm/collect_images.pl: forced binary mode for written files. This lets the script work correctly under Windows. Ryo 2003-11-29 server/apply.c: correctly display learned skill's name, and not the scroll's. server/skills.c: make 'sense curse' and 'sense magic' check items on the ground too. Ryo 2003-11-25 common/loader.l, loader.c: Fix firewalls so that their spell is properly initialized - uses 'dam' and not sp for those objects server/apply.c: Fix check_weapon_power so that it finds proper wc object. Fix unapply_for_ob so that it won't unequip cursed/damned weapons if player switches objects. MSW 2003-11-11 bulk of this is to fix exp loss when changing gods if you have more than 2 billion exp, removal of spells when you switch levels, and not giving you all new spells when you switch religions. -- common/living.c: Update exp functions to be fully 64 bit aware. Don't take away from player total exp if SK_SUBTRACT_SKILL_EXP is passed in. common/utils.c: Add 64 bit version of random_roll(), called random_roll64() lib/treasures: Make indentation consistent for some treasures. server/apply.c: Use the FLAG_STARTEQUIP to denote god given spells, instead of using special prayer markers. This simplifies the spell learning and removal code. server/gods.c: Make exp loss for changing religions 64 bit compliant. Fix become_follower() so that it doesn't give all the new gods special spells if you switch religions. Fix code so that it properly removes all special prayers from previous god, and also print out message on what spells you lost. Don't set the prayer skill as applied in various areas - this results in two skills being applied, which isn't proper. MSW 2003-11-09 common/living.c: Win32 compilation fix (levels is sint64, not uint64) include/plugin.h: new hooks for free & fix_player. Required for Win32. include/plugproto.h: new prototypes for CFWFreeMemory and CFWFixPlayer, wrappers for free( ) and fix_player( ). Required for Win32. include/sproto.h: added prototypes for new plugin hooks and improved tell command helper. plugin/plugin_python.c: wrap calls to fix_player, free and free_object with plugin ones when memory allocated by CF's main exe. Required for Win32 to work correctly. server/c_chat.c: improved 'tell' command to accept first letters of player name only, case-insensitive. If 2+ players match, returns with a failure message. server/player.c: new function find_player_partial_name. Returns player whose beginning of name matches specified string, NULL if more than one matches. Fix move_player to check specified direction's validity. server/plugins.c: added wrappers for free( ) and fix_player( ). Required for Win32 compatibility. Ryo 2003-11-07 common/treasure.c, doc/Developers/spells: Fix generation of rods so they have enough charges to cast the spells. Update documentation on what maxhp for the archetype of rods means. MSW 2003-11-01 server/player.c: Fix crash in stand_near_hostile when it is called on tiled maps with player near edge. MSW 2003-11-01 Various bug fixes: common/arch.c: Fix item_matched_string() so that it only passes in the length of the pssed in name in the strncasecmp(), and not the shorter of the passed in string or item name. Otherwise, if player does a 'drop wand of', unidentified wands (name just wand) would match. Similarly, if a player did 'drop ringmail', unidentified rings would match, etc. common/living.c: Fix fix_player() to always process the praying skill with respect to resistances and whatnot. This is necessary because the god give abilities are put in this skill, and those shouldn't go away depending on if the skill is in use or not. Also fix bug in add_exp routines which wasn't multiplying permanent exp by PERM_EXP_GAIN_RATIO common/object.c: Fix find_obj_by_type_subtype() - had extraneous semicolon after the for loop, so the if code that was supposed to be for each object was never called and instead would crash as it would get called with tmp was null. server/attack.c: Fix problem with kill_object() not finding proper skill - it would use the skill object instead of the skill. Fix problem of poisoning not setting up proper skill name in poisoning object. server/c_range.c: If player is invoking a spell, don't update their range_magic value. server/skill_util.c: Fix divide by zero problem if improperly passed skill object. MSW 2003-10-26 TRIGGER_MARKER: common/glue.c, common/button.c, include/define.h, funcpoint.h, libproto.h server/init.c: Add trigger_marker (type #52) which is a Marker that can be triggered. Useful for placing forces in player when connected trigger is tripped. TM 2003-10-26 common/glue.c, common/object.c, common/player.c, include/funcpoint.h, server/init.c, server/monster.c, server/shop.c, server/skill_util.c: add find_skill_by_number() function - this replaces find_skill. Locate new function in skill_util.c, which is more a proper place than common/player.c - this change necessitated adding glue function pointers so the other common files can call it. server/spell_effect.c: Fix cast_heal() so if the spell is not one that heals hit points, don't process the code that checks for that and sets a false success value. socket/metaserver.c: Clean up formatting - no code changes. MSW 2003-10-25 server/apply.c: small fix to apply_spellbook in the rare case when the spellbook contains no spell (happens when DM issues a bad 'create' command for instance :). Ryo 2003-10-04 server/c_new.c: fix command_run and command_fire so they check the given direction is [0..8]. This enabled weird things like hitting non-adjacent monsters. Patch by Karla Stenger on cf-devel, slightly modified by me. Ryo 2003-10-21 common/arch.c: fix item_matched_string() so that matching makes sense - the ordering was wrong, so that we would match something with a low priority, and skip over looking to see if that same object would get a better match. Order the function so that we look for the best matches first. MSW 2003-10-08 socket/request.c: Clean up some compile warnings. Improve big face handling - there were cases where data wasn't being sent when it should have, and vice versa. Basically, do better checking to see if we should send a big face for a particular layer, and also better checking to make sure we don't send the same face more than once for the same layer. Also, change esrv_map_scroll() to clear out spaces that appear into view - adds a little extra bandwdith, but necessary because otherwise the fact there is a big face on the edge doesn't always get sent. MSW 2003-10-07 TODO: various updates. common/button: Old patch by David Seikel: change inventory checkers so that the monster/player is also checked against. And do more proper for checkers that check against slaying or race - if the trigger doesn't have those set, we don't want to compare a null against another null and get success). server/apply.c: Change apply_shop_mat() so that it removes unpaid objects from monsters (or thrown containers for that matter). Old patch by Bernd Edler to improve messages dragons get for eating various food types. server/player.c: Add another missing call to fix_player(). Modify move_player_attack() so that the target player doesn't hit back if they are the WIZ or on a battleground MSW 2003-10-06 utils/player_dl.html utils/player_dl.pl.in: New files - scripts for allowing character directories to be downloaded over the web. configure.ac: Add check for 'tar', so that we can put it in the script above. Makefile.in (All of them): Changed because TAR variable propogated to them. MSW 2003-09-30 server/time.c: Real change is to add a missing call to fix_player - without this new players would be getting messed up maxsp/maxgrace values. Cleaned up formatting in move_player_changer() while doing the other change. MSW 2003-09-28 common/living.c, include/libproto.h: Update some functions to take 64 bit int values for exp usage. random_maps/random_map.c: Don't ever make rogue maps symmetric - creates unconnected maps. Clean up layoutgen() to not have a bunch of duplicated code. MSW 2003-09-25 server/skill_util.c: Call esrv_send_inventory on the cauldron if we performed alchemy. Needed for cauldron's contents to get updated. MSW 2003-09-23 Modified files: TODO common/anim.c common/arch.c common/button.c common/exp.c common/init.c common/item.c common/living.c common/loader.c common/loader.l common/logger.c common/object.c common/re-cmp.c common/readable.c common/recipe.c common/treasure.c doc/Developers/objects doc/Developers/protocol doc/Developers/python doc/Developers/skills doc/Developers/spells include/Makefile.am include/Makefile.in include/attack.h include/config.h include/define.h include/global.h include/includes.h include/libproto.h include/living.h include/map.h include/newclient.h include/newserver.h include/object.h include/player.h include/plugin.h include/skills.h include/sockproto.h include/spells.h include/sproto.h include/timers.h lib/Makefile.am lib/Makefile.in lib/animations lib/archetypes lib/artifacts lib/bmaps lib/bmaps.paths lib/collect.pl.in lib/crossfire.0 lib/crossfire.1 lib/faces lib/formulae lib/settings lib/treasures lib/treasures.bld lib/adm/collect_images.pl plugin/plugin_python.c plugin/include/plugin_python.h server/Makefile.am server/Makefile.in server/alchemy.c server/apply.c server/attack.c server/c_misc.c server/c_move.c server/c_object.c server/c_party.c server/c_range.c server/c_wiz.c server/commands.c server/disease.c server/gods.c server/init.c server/login.c server/main.c server/monster.c server/pets.c server/player.c server/plugins.c server/resurrection.c server/rune.c server/shop.c server/skill_util.c server/skills.c server/spell_effect.c server/spell_util.c server/swamp.c server/time.c server/weather.c socket/info.c socket/init.c socket/item.c socket/loop.c socket/lowlevel.c socket/metaserver.c socket/request.c socket/sounds.c Added Files: server/spell_attack.c Removed Files: include/skillist.h lib/skill_params lib/spell_params Updated code for skill + spell code. skills and spells are now objects. tuning these now means changing the archetypes. New spells can now be added just by making a new archetype. Lots of code cleanup also done. MSW 2003-09-12 TRAPS: include/define.h common/object.c, treasure.c server/attack.c, skill_util.c, skills.c, rune.c, time.c, player.c, apply.c Established new type traps distinguished from runes. Traps are more mechanical in nature, not impacted by detect magic or counterspell (maybe in future once skills are settled out more fine tuning changes in detecting and disarming these too...). Traps also can now trigger connected objects if they are detonated. Migrated traps to new type and made new generic trap archetype for more complex trapping (ye olde red shaded tile...) TM -2003-09-04 friendly_fire: Added friendly_fire to attack.c, called from hit_player. Will put a cap on maxdam that is a percentage (1-100%) of damage (min 1) based on SET_FRIENDLY_FIRE value when players attack in peaceful mode. Changed who, statistics to show this setting better and added help file for peaceful. It would be nice to have a indicator in the client for this as well. TM - 2003-08-25 protocol/doc/code: Changed the way smoothing is done. Switched the smooth command to binary mode, rebuild archetype files, added doc on smoothing, updated protocol file. Changed a the "togglemapextended smoothing" to "togglemapextended smooth" to prevent problem of compatibilities with previous cvs smoothing releases. Tchize 2003-07-08 protocol: Added new command to send extended map informations to the client. Mainly used for now to send smoothing informations. Also commented the modifications in the protocol file ind doc/ lib/Makefiles: Changed to install the smooth file too. Needed by smooth code common/loader.l and loader.c completly reworked get_ob_diff to improve speed at mapsave time. For now function is interlaced with commented old code. Will clean up when code will be proved working. (hope middle of july) Tchize 2003-07-03 server/apply.c: Fix auto_apply - missing else, causing extra treausres to be generated inside of shop tiles. server/monster.c: Fix npc_call_help to be map tile aware. MSW 2003-06-18 lib/collect.pl.in: Modify it so that it will collect .trs (treasure) files and build a treasures.bld from that as well as the existing treasures file. In this way, treasure information for objects can be put in the arch directory. lib/Makefile.am, Makefile.in: Modified so that it copies over the treasures.bld to treasures in the destination directory. Have the collect directive also build the images, so that a double make isn't necessary. lib/treasures.bld: Added file - like the archetypes, this is the pre- build treasure file. Until .trs files are added, this will just match the treasures file with some additional comments. MSW 2003-05-26 common/map.c: Fix bug causing unnecessary crashes - ok for the map to match if the object has been removed. socket/loop.c: Only make call to draw_client_map() if we have a valid map to draw. MSW 2003-05-26 common/anim.c: Patch by AV to make sure multipart monsters animations stay in sync. MSW 2003-05-25 server/apply.c: Fix bug in that we weren't calling esrv_map_scroll() when player used a shop map but lacked sufficient funds to pay for his items. MSW 2002-05-23 common/item.c, common/utils.c, include/config.h: Add #define NEW_MATERIAL_CODE and checks in the other files for this - if this is commented out (default), then the new material naming code is disabled - material names won't be put in the items names as shown in the inventory (can still see material by examining an object), and objects that are created will be created with the default material (eg, iron for most armor/weapons, eg, brass, bronze, copper items won't show up anymore). lib/settings: Add comments from the old config.h file that describes what the options already does. Having no comments in this file or in config.h anymore is very unfriendly. MSW 2003-05-20 server/player.c: Have players start at max hp/grace/sp. MSW 2003-04-14 server/c_range.c: Add check to make sure we are actually removing a golem and that the object hasn't been freed/recycled and the player not updated. Fixes crashes. MSW 2003-04-13 acinclude.m4: Update path to find python includes, since aclocal.m4 gets derived from this file. configure.ac, configure: Add utils/scores.pl to list of files to substitute on. common/loader.l, loader.c: Add subtype for objects - will be used in future work. common/object.c: Add subtype diff check in CAN_MERGE() common/porting.c: Have it use SAVE_DIR_MODE when doing the mkdir, and not have hardcoded 777 permissions. doc/Makefile.in, doc/Makefile.am, doc/Developers/Makefile.am, doc/Developers/Makefile.in: Move some of the spell docs around and merge them together doc/Developers/objects: Add notes about subtype. doc/Developers/spells: New file, contains preliminary work on spell objects. include/config.h: Remove command about DM_MAIL and LIBDIR from file, as they are options no longer present. Update comment about SAVE_MODE, and add SAVE_DIR_MODE include/object.h: Add subtype field to object. server/login.c: Have it use SAVE_DIR_MODE when doing the mkdir, and not have hardcoded 6700 permissions. utils/Makefile.in: Updated to know about scores.pl utils/scores.pl.in: New file - reads player file to generate HTML score file. MSW 2003-04-04 TODO: Various update aclocal.m4,configure: Update path to find python (fix again) common/image.c: Minor update to a ocmment in the code. common/los.c: Add missing P_OUT_OF_MAP checks that resulted in some incorrect LOS calcuations. include/funcpoint.h: Remove draw_func function pointer. lib/Makefile.am, in: Remove bmaps.paths to from being installed or being part of distribution - bmaps.paths is only needed when collecting the image lib/*: Rebuilt server/c_object.c: Patch by Bernd Edler to have the apply functions take into acount if the item is equipped or not when looking for good matched items. server/commands.c: Move printlos to normal commands. I don't think it reveals any information that is in any way harmful. And since it dumps the output to the players screen, no concern of it filling up log files. Also, when doing LOS debugging, it is pointless to have it as a DM command because LOS is ignored for DM's. server/disease.c: Modify remove_symptoms to remove all symptoms the player may have a disease. Modify infect_object() to not allow a creature to have more than one instance of the same disease. socket/info.c: remove draw() - instead, draw_client_map() can be used, as that is most the only thing draw() did anyways. socket/loop.c: Update draw() calls to draw_client_map() socket/request.c: Remove special handling for darkness==4 cases (first space that is in full darkness) - this is extra complications and causes display problems. Update draw_client_map() to include the little bit of logic that draw() had that this function did not have. MSW 2003-04-01 common/glue.c, include/funcpoint.h: remove draw_func() pointer - no longer needed, so code that sets up pointer removed. lib/*: rebuilt - facings added to old player animation information. ruined_temple archetype added. server/init.c: remove set_draw() function server/player.c: remove call to draw() - socket code takes care of this. MSW 2003-03-24 server/spell_effect.c: Some code cleanuip to cast_change_attr - mostly to combine the processing of the stat improving spells together. The actual change to playability is that bless and holy possession don't stack if cast multiple times. server/spell_util.c: Modify create_aura so that player can't have more than one aura (of the same type) active at a time. MSW 2003-03-20 server/apply.c: Change weapon improving code to only use up the number of potions that it needs, and not all on the ground. Required adding another arg to eat_item() which is the number of items to consume. include/sproto.h: Rebuilt for new eat_item() (actually, a static, so no longer shows up in this file) server/attack.c: Change did_make_save to strip out magic attacktype when making saves for objects - otherwise, things like poison cloud destroy objects. server/time.c: deal with player animations special in process_object - need to pass in the facing value, and not direction, since direction gets reset. MSW 2003-03-19 common/anim.c: Pass direction to animate_object() - needed for player animations as player's facing may not match direction. crossedit/Attr.c, server/main.c, server/time.c: Update calls to animate_object() include/libproto.h: rebuilt include/newserver.h, plugin_animator/animator_box.c, socket/init.c, socket/request.c: Remove newanim field from socket structure - not needed - how to animate is determined by object, not by socket. server/move.c: Add check to P_OUT_OF_MAP in teleport function. server/player.c: change move_player to call animate_object, so it gets full power of functionality it supports instead of 4 way hardcode animation information. server/spell_effect.c: When altars are consecrated, don't look to arch name for first portion of name - always call them Altar of %s - fixes problem where altar is special god altar that has god's name in archetype, resulting in altar of .. of ... MSW 2003-03-18 Patch for 64 bit experience total, as well as flexible number of levels. Basically, max level is now dynamic, set in exp_table file. Experience is now a 64 bit value, so much higher totals now allowed. To allow for flexible levels, add new function - did_make_save() which is used for players/monsters to see if they make their saving throw - this is necessary because the savethrow[] array may not be as large as max level - did_make_save takes this into account. NOTE: If your updating a server, you will need to copy over/set up a new exp_table file that has max_levels defined and at least one of the tables uncommented. There are no longer any compiled in defaults -- configure, configure.ac: Add AC_CHECK_SIZEOF calls for long and long long so we can know which one to use for 64 bit support (other checks may need to be added) common/exp.c: Remove levels table, replace it with a 64 bit pointer. Change init_experience to allocate appropriately sized table, have it read max_level value from exp_table file. Replace atoi calls with atoll to get 64 bit value. Update dump_experience to properly print 64 bit values. common/info.c: Update dump routines that dump exp to properly print 64 bit values. common/init.c: Add initializing for settings.max_level value. common/item.c: Update sprintf's to handle 64 bit output of exp (speed) value in objects. common/living.c: change MAX_EXP define, update MAX_EXP_IN_OBJ define, add MAX_SAVE_LEVEL which corresponds to how large the savethrow table is. Change MAXLEVEL to settings.max_level. Change level_exp() to return 64 bit value, other updates in functions to use 64 bit values. Add did_make_save() function. common/loader.l, common/loader.c: Update load/save routins of exp to deal with 64 bit values. common/map.c: Update calculate_difficulty to use 64 bit values when storing exp - unlikely to make a difference, since unlikely any map will get to a point where it has that much exp on it. common/porting.c: Remove dead code from save_long(), add save_long_long() to save 64 bit values. include/autoconf.h.in: SIZEOF_LONG and SIZEOF_LONG_LONG values added. include/global.h: Add code to typedef sint64/uint64 types based on what type gives us those values. Add max_level to settings array. include/libproto.h: rebuilt. include/living.h: Replace exp field with 64 bit value. include/player.h: Update party kill log exp tracking to have 64 bit values. lib/exp_table: Udpate comments about max_level, uncomment what was the default table so new installs have working table. Add 5 levels to all the tables. random_maps/monster.c: Update place_monsters to use 64 bit when storing exp total for map/per square. server/apply.c: Replace MAXLEVEL with settings.max_level, add did_make_save calls where appropriate server/c_misc.c: have statistics command properly print 64 bit exp value. server/c_wiz.c: Have stats command properly display 64 bit value. server/hiscore.c: Replace exp values with 64 bit values, update to properly load/display them. server/player.c: replace savethrow[] reference with did_make_save() server/skill_util.c: Update skills command to properly show 64 bit exp values. server/spell_effect.c: replace savethrow[] reference with did_make_save(), allow players to cast directors right beneath themselves, but other walls must be on empty space. MSW 2003-03-07 Various bug fixes. crossedit/Attr.c: Minor cleanup to eliminate some compile time warnings. plugin/plugin_python.c: Remove some unused variables, thus fixing up some compiler warnings. random_maps/random_map.c, random_maps/random_map.h, random_maps/special.c: Add MIN_RANDOM_MAP_SIZE values instead of hardcode constants. server/monster.c: Fix communicate - odd bug can be map gets swapped out just after player is transferred to another map, causing crashes as map that was originally spoken on is no longer in memory. server/rune.c: add missing free_object call when erasing runes. server/skills.c: Change write_on_item to determine type of writing based on content of mesage, or lack thereof, and not the marked object. Fix problem of buf not being initalized. MSW 2003-03-06 Various bug fixes. Makefile.am, Makefile.in: Put crossedit as the last directory, so any build errors for crossedit doesn't effect anything else. README: Update ftp site listing. TODO: More things aded. aclocal.m4, configure: Add missing / when checking in /usr/local for python headers. common/map.c: Add some debugging in free_all_objects that checks to make sure there are not objects remaining that belong to the map just freed - only active if MANY_CORES is set. random_maps/random_map.c: Increase minimum random map size to 10x10 - this is need for square spirals to work properly I think. server/spell_effect.c: Have perceive self tell dragon players what they are currently focused on. Fix town portal to remove force objects from players if destination is no longer available. server/swap.c: Reset maps reset_time when loading them in in read_map_log() - this is only used if recycle temp maps is on. Also, do sanity checking on reset_time value - bogus values were observed on metalforge. socket/request.c: Update map timeout in draw_client_map() - in this way, we don't swap out a map within a players view only to swap it back in. MSW 2003-03-01 ------------------------------------------------------------------------------ Changes for 1.5.0: */Makefile.in, related files: Updated for 1.5.0 server/attack.c: Don't change weak wall image if no damage was actually done. server/c_object.c: Include math.h - needed for pow() server/spell_effect.c: fix infinite loop in town_portal MSW 2003-02-24 common/anim.c: Fix for 8 way facing animations. lib/treasures: Add sheep treasures lib/* (rest) - rebuilt server/spell_effect.c: Fix up counterspell - mainly fix a bug in that if counterspell hit a multipart magic that used magic as an attacktype, it would also crash. However, code also woudln't work properly on tiled maps, and I'm dubious if it would work properly if there was more than one effect on a space. MSW 2003-02-23 server/skills.c: Fix jump so that it updates the clients map properly. server/spell_effect.c: insert town portals below the player so it works better with apply. MSW 2003-02-20 server/move.c: Fix transfer_ob so that it sends newmap command to client if we're moving a playing - otherwise fog of war displays bad information on the client. MSW 2003-02-19 More bugfixes: server/c_wiz.c: Fix reset command - while it deleted the maps, it made things so that it never got removed from the map listing - instead, just let flush_old_maps do most of the work. server/main.c: If player tries to enter a random map that has been reset and that we have no informatino about (eg, going up in a dungeon), just say the exit is closed instead of making a completely random map that usually isn't in keeping with the dungeon (and still won't lead outdoors) server/move.c: In move_teleporter(), change it so that if a player uses a shop map yet there is no place to put the player, just drop him on top of a monster - this fixes problem of players getting trapped inside of shops in random dungeons. MSW 2003-02-16 random_map/random_map.c: Include parameters used to make map in msg of map - this can hopefully be used to debug what is really happening when bad maps are made. server/rune.c: Modify dispel_rune function (called from disarm spell) to erase marking runes. While at it, fix it so that it does the right thing with respect to tiled maps. MSW 2003-02-15 include/sproto.h, server/move.c: Modify try_fit() to take mapstruct parameter for which map we are trying to fit this on - fixes problems with rolling boulders accross map (only function that currently uses this). MSW 2003-02-14 common/item.c: make item_power stop showing up in ring short descriptions. fix some of the items that were double-displaying materialnames, like mithril mithril chainmail. common/loader.l: add tooltype common/utils.c: Unless the object is armour or weapons, pick the first materialname we find. Now, newly generated diamonds will stack. Fix name_to_material to return NULL if it finds nothing, fixes navar_city/museum crash. Change set_materialname to take a materialtype_t argument, allowing functions to manually set the materialname, rather than let the randomizer pick for them. include/define.h: Add TOOL and BUILDFAC for item building. include/object.h: add tooltype for item building. include/materials.h: add M_SPECIAL. Set this in an object, to prevent things like mithril mithril chainmail. This is primarily only needed in artifacts, because they change the base material of the arch. Also useful in things like the demonspawn shield, and on maps. lib/artifacts: sprinkle M_SPECIAL around. server/player.c: remove auto_heal. This never should have been committed, and was never referenced by any code. server/c_object.c: add item building, but add it disabled. Too many bugfixes were tied in with this code to cleanly add them. When enabled, this code will add player item building, similar to create to take place. Requires a host of graphics and arches to be useable. garbled 2003-02-13 random_maps/special.c: Fix possible bug with placement of special maps. Add lore/endlore to object structure to hold general information about objects: common/loader.c, common/loader.l: Add loading and saving of lore field. common/object.c: handle lore field for copy/free/other object operations. Also, update CAN_MERGE to look at materialname also. doc/Developers/objects: Add notes about lore. include/object.h: add lore field to object. server/apply.c: Fix bug in that cursed weapons were not equipped/ unequipped. MSW 2003-02-11 doc/Developers/objects: Add nodes about shared strings in objects. server/c_misc.c: Remove check for name length - check_name takes care of that for us. server/monster.c: store return value from get_map_flags - seen some crashes traced back to this area, want to see what it returned. Allow objects with no msg to still use scripts that listen. server/player.c: Fix potentional issue of freeing/adding players name when they enter play again - seen some crashes attributed to odd names. MSW 2003-02-08 More bugfixes: server/player.c: Fix permadeath without resurrection - wasn't deleting player save files as it was supposed to. If permadeath + resurrection was in use, I believe it all worked as expected. include/shop.h: remove _SHOP_H after endif, causing compiler warnings. include/skills.h: Add check to USING_SKILL to make sure chosen_skill is not null. server/c_chat.c: Add some missing return values, resulting in compiler warnings. server/skill_util.c: Remove unused variable. compiler warnings again. server/spell_effect.c: Change dimension door so that you can't go through spaces that block passsage and also block view (eg walls). This goes back to the more traditional behaviour. Remove some unused variables. server/spell_util.c: Add missing P_OUT_OF_MAP to move_missile, resulting in crashes. server/time.c: if generator is not on a map, don't have it generates. Fixes crashes. MSW 2003-02-02 New materialtype system for crossfire. Based in concept on my original design, but rewritten from scratch to make it easily extensible. In a nutshell: Each of the old materialtypes (metal, glass, stone, wood) are now a class of materials. When an item in the game is created, if it does not have a specific materialname of it's own, a materialname is generated randomly from the matching entries in the "lib/materials" file. This file contains all of the saving throws, and other material specific modifications for each of the expanded materials. Materials can be manually specified in the arch with the "materialname" directive. Such as the gold coins, which are specified to be made of, you guessed it, gold. Saving throws have been slightly rewritten to use the new materialtypes, and a few other minor details associated with materialtypes have been patched up. Adding a new type of stone or wood, is as simple as adding a new entry in the lib/materials file. The game will automatically start distributing them around randomly. garbled 2003-01-29 Various bug fixes: common/item.c: If nrof of an item is 0, have it print singular name and not plural name. server/c_object.c: Fix typo when printing value of optoins - had an extra 'the' in place. Also, don't print value of objects with no pick flag set. server/login.c: Enforce maximum name length for new characters. server/monster.c: Change parsing code for messages/@match code - new code is simpler, and should also be simpler and less bug ridden, but otherwise functionally equivalant. Also fix up communicate to work properly on tiled maps. server/spell_effect.c: fix up move_aura to not crash hopefully. MSW 2003-01-26 More bug fixes: common/item.c: Add missing braces - was resulting in some items getting display like 'gauntlets of strength (Str+1)(Str+1). include/map.h: Add MAGIC_MAP definitions to the file. server/shop.c: Put back in code that uses magic_mapping_mark to determine what items to display in inventory. Update for new one magic mapping code stores information away. server/spell_util.c: Add missing P_OUT_OF_FLAG check, which resulted in crashes. socket/info.c: Move MAGIC_MAP definations to map.h. Add check for P_OUT_OF_MAP. Remove code that stops on P_NO_MAGIC - with that it wouldn't search the shops. MSW 2003-01-16 server/move.c: fix try_to_fit and roll_ob to work properly on tiled maps. Also some performance improvements to those functions. MSW 2003-01-12 Bulk of this commit is to improve code for tiled maps - replace wall/blocks_magic/blocks_cleric, etc with get_map_flags which also does map tiling translation as needed. This should fix a lot of the bugs related to map tiling (there are sure to be more out there - all the get_map_ob still need to be checked). Other changes - many spells stopped progressing on spaces that blocked view - that is now removed - didn't make a lot of sense. Other fixes - some cleric spells (eg, word of recall) checked to see if magic was prohibited, didn't check to see if cleric was prohibited. Clean up some bugs in the lighting code that would cause erroneous results. Also, allow players to see immediately around them on outdoor maps no matter how dark the map really is - behaviour on indoor maps is the same. Lots of code reformatted, and lots of obsoleted/dead code removed. Add max range to dimension door. Fix magic map - got broken when the layer stuff was redone - was not showing proper colors. IT also works sensibly on tiled maps now - rather than display based on the map, it gives the player a 50x50 area centered on where the player is. Change fire_bow - move special player fire modes into own function - makes code much cleaner. Hopefully this fixes more bugs than it introduces. common/los.c, common/map.c, common/object.c, crossedit/Edit.c, include/libproto.h, include/sockproto.h, include/map.h, include/spellist.h, include/sproto.h, random_maps/treasure.c, random_maps/wall.c, server/attack.c, server/c_misc.c, server/c_wiz.c, server/disease.c, server/main.c, server/monster.c, server/pets.c, server/player.c, server/rune.c, server/shop.c, server/skill_util.c, server/skills.c, server/spell_effect.c, server/spell_util.c, server/time.c, socket/info.c: See note above server/apply.c: Limit number of times weapon can be enchanted so that it won't overflow item_power. Modify enchant armor to enchant as normal armor is enchanted, also only allows one item to be enchanted. MSW 2002-01-07 common/item.c: Add 'unidentified' to display of examined items if the item has not been identified. Only display spell regen penalty for armour if there is in fact a penalty. lib/archetypes: rebuilt for updated demon speed, pick up other new archs. lib/animations, lib/bmaps lib/bmaps.paths lib/crossfire.0 lib/crossfire.1 lib/faces: rebuilt server/main.c: Name random maps based on final map component (if available) or map they are spawned from - this gives so clue in 'who' command where the players really are. server/monster.c: Fix code that would cause monsters to ignore golems/ avatars. server/pets.c: Clean up a few warnings, fix bug in pet_move that caused crashes - owner of a pet isn't always a player. server/player.c: Remove on_same_map check - can_detect_monster also performed check, so no need to have extra call. server/spell_effect.c: modify alchemy to properly deal with tiled maps, change behavior for spells that block view - they no longer block alchemy, but spaces that block magic will. MSW 2002-01-05 TODO - add notes about item damage - clear it out of my mailbox. common/loader.l, loader.c: Add check at load time to see if monsters hp is higher than its maxhp and print a debug message if so. devel/Makefile: Remove - makefiles shouldn't be in CVS, only .in versions. server/attack.c: Fix calculation of max_damage in kill_object - this was being done incorrectly, resulting in fired spell objects causing incorrect amounts of damage, resulint in some monsters ending up with a lot of hp. Fix call to kill_object to pass in correct damage value. server/monster.c: Put in check so that monster won't regen to more hp than they should have. server/spell_util.c: Removed unused variable from move_missile. server/weather.c: fix bug that causes crash if empty space is encountered on map. MSW 2003-01-03 socket/request.c: Fix buffer (malloc) overrun in esrv_send_stats - more stuff has gotten to be added, without ever increasing the size of the buffer to hold it. MSW 2003-01-01 server/time.c: Fix bad code in stop_arrow that caused crashes/improper freeing of data. MSW 2002-12-30 common/treasure.c: Fix initialization of treasure structs to use calloc. server/player.c: Fix infinite loop. socket/loop.c: Make sure we put in null terminator for socket data. MSW 2002-12-26 New Arrow and Pet Code: Add bowmode and petmode commands. Allowing the player to change the firing style for bows to one of either threewide, or spreadshot. Allow players to change the operating modes of his pet with petmode. Can be either seek and destroy, defend, or normal historical behavior. Change bows to impart speed to arrows based on damage and other magical plusses. Damage decays over distance, to stop arrows from flying forever. Very fast moving arrows will pierce multiple targets. An arrow moving at a speed greater than 10.0 will go straight through a target, losing 1.0 of speed in the process. Change magic missile to use spell_find_dir instead of find_dir to stop it from flying in a circle and hitting the caster, and to make it stop flying into walls to hit creatures behind the walls. Various bug fixes: common/living.c: Reset glow_radius for players, so they stop glowing after they snuff out their torch or whatever. server/apply.c: Fix message about improving armour so that it is now accurate. server/monster.c: Add some debug lines that may show cause of excess monster hp. server/spell_effect.c: fix compile warning in summon_pet(). Clean up indentation of alchemy functions, but functional changes is to insert gold nuggets below player (so more of the actions work), as well as to reset the view position, so that it won't have the 'previous 50' object selection. Add suggested parens in cast_detection. server/weather.c: Fix crash in weather code if snow was only object on space. MSW 2002-12-20 +++ server/weather.c: More weather routines: Now the game will attempt to completely reformat the world, and modify it with the weather and elevation. When dynamiclevel is set to 5 or above, the game looks at each tile, and the weather conditions present in that tile. It then consults a table of different terrain types, and what conditions they prefer to grow under. If the conditions match the spot, and there is nothing special about the spot (like a house, or a road), then we drop the new tile type on the overlay map on that location. Tuning of this can be done at the top of weather.c, by changing the weather_tile array. Also.. add a feather_map() routine which tries to break up the blockiness of some of the weather effects by spreading the tiles around. This code works.. but needs tuning, and probably a little more testing. Some of the conditions for the various tiles really need to be looked at, and fiddled with. garbled 2002-12-08 +++ common/exp.c: Fix bug were drain attacks added exp. MSW 2002-12-05 server/player.c: Change move_player_attack() so that we look for monsters to attack even after finding a rollable object - there can be non blocking rollable objects with monsters on top - we want to attack the monster, not roll the object. MSW 2002-12-03 TODO: Move more items from my mailbox to the TODO list. common/living.c: Init item_power in player to zero in fix_player() - bogus results were getting generated as it just kept getting incremented. common/porting.c: fix remove_directory so it works properly - checking for . and .. entries too late, calling unlink instead of rmdir. include/sproto.h: rebuilt lib/animations, lib/archetypes, lib/bmaps, lib/bmaps.paths, lib/crossfire.0, lib/crossfire.1, lib/faces: Rebuilt - new archs added, catch is_thrown addition to thrown rock/boulder archs. server/c_move.c, server/c_range.c: Add another parameter to do_skill() - part, which is closest part of creature to target object - current only used for the throw code. Update calls to this function to add additional parameter. server/c_object.c: Remove the NDI_UNIQUE from the 'item is too heavy to pick up' so that it won't flood the client with them if players goes onto space with lots of objects. server/main.c: Minor cleanup to fix compiler warning about ambigous if/else. server/monster.c: Pass closest part of monster when having it use a skill so that it doesn't throw rocks into itself. Update calls to do_skill as described above. server/player.c: Cal delete_player() when player quits - this properly cleans up any per player unique maps they have. Also, check for any such maps currently in memory, and delete those so that unique maps don't get 'gifted' to the next character of the same name. Update calls to do_skill as described above. server/shop.c: Combine items of the same name together in the output of the shop listings. Include the number of items, remove special casing of some objects so that query_base_name is used for all item types. server/skill_util.c: Modify do_skill() to take additional param as described above. Also, have do_skill return 1 on success, 0 on failur to use skill, and not return exp - otherwise, monster code has no idea if skill was successfully used, as throw doesn't grant exp, and this caused monsters to move into the object they just threw. Update calls to do_skill as described above. server/skills.c: Clean up skill_throw function to return meaningfull value. Also, pass along extra part of closest monster part to target. Modify do_throw to return value, use closest part of body as origin point for thwon object. server/spell_effect.c: Use isqrt function instead of definining ISQRT that used float version. Cleans up compile warning - most likely not seen before as spell was #ifdef SPELL_ENCUMBERANCE out. server/time.c: Put sanity checking for players speed_left in move_player_mover() - got some reports of infinite negative speed on metalforge, and this is the only place in the code where I could see that happening given the description of the events. utils/arch2xml.py, utils/cfarches.xsl: New script (and template) by Todd Mitchell. Script can convert archs to xml, and the template is usuable with mozilla to look at the output. MSW 2002-12-02 common/object.c, include/object.h: Add INS_BELOW_ORIGINATOR flag to insert_ob_in_map - this is used for treasure chests so the treasure is put below the player. Also fix insertiong of items on spaces that block view - put them in proper order, and not just directly above the floor server/apply.c: Tell player what level they need to be if they are not of sufficient level to improve armor. Modify apply_treasure to use INS_BELOW_ORIGINATOR flag, clean up some of the other logic in apply_treasure. server/c_object.c: Modify command_take to use the container inventory when doing a pickup, and not the container itself. MSW 2002-11-30 TODO: Updated with dm 'follow' command. common/loader.l: Rebuilt. common/map.c: Fix up some formatting - no code change. include/player.h, server/apply.c, server/player.c, socket/info.c: Remove chosen_item_spell field - isn't needed anymore as that information is determined each time player fires wand/rod/horn. This fixes those items firing magic bullets if they were equipped when player saved and rejoined. Some additional cleanup done in rangetostring() - mostly formatting changes, but minor code changes. MSW 2002-11-29 include/shstr.h: Update REFCOUNT_TYPE to be an int - seems to at least fix the bug of server crashing when running around the bigworld - given the size of the maps, quite possible that enough objects of the same name would be in memory to overflow the size size of a short. MSW 2002-11-19 Changed a ton of #ifdefs into settings: convert #ifdef NOT_PERMADETH into settings.not_permadeth. SET_TITLE and RESURRECTION are now settings. #ifdef SEARCH_ITEMS -> settings.search_items #ifdef SPELL_ENCUMBRANCE -> settings.spell_encumbrance #ifdef SPELL_FAILURE_EFFECTS -> settings.spell_failure_effects #ifdef CASTING_TIME -> settings.casting_time #ifdef REAL_WIZ -> settings.real_wiz #ifdef RECYCLE_TMP_MAPS -> settings.recycle_tmp_maps #ifdef SPELLPOINT_LEVEL_DEPEND -> settings.spellpoint_level_depend #ifdef EXPLORE_MODE -> settings.explore_mode make explore mode actually *work*. #define MOTD -> settings.motd #define DM_MAIL -> settings.dm_mail garbled 2002-11-12 New alchemy code, as discussed on the developer list. Now recipies include two new tags: skill and cauldron. With skill, you can set which skill activates this recipie, and the cauldron, corresponds to the arch name of the facility you will use when creating the item. In this way, item creation is now more generalized than just alchemy, and specific formulae can be written to utilize different skills, or perhaps special formulae would require a hard-to-find cauldron. Functionally, the alchemy, or alchemy-like-skills are now activated by the use_skill command. The secondary use of the alchemy spell has been withdrawn, so now it functions in the way it was originally intended again. garbled 2002-11-11 socket/loop.c: add a setting fastclock. This makes the server's clock run *really* fast. For now, it's good for debugging purposes, but in the future it will allow a dm to ravage a world with weather quickly. include/define.h: add FLAG_IS_WATER include/global.h: add fastclock to settings include/map.h: add water to weathermap structure include/sproto.h: add tons of new functions in weather.c common/init.c: update for FLAG_IS_WATER common/loader.l: update for FLAG_IS_WATER server/init.c: add code to read fastclock setting server/weather.c: Complete update, largely rewritten. Now the world is cut into a 100x100 matrix of weathermaps. Each one of these maps is computed at initial boot, and written to disk, following which, they are simply read from disk at boot. For each of the main weather types (pressure, humitidy, base temperature, wind direction, wind speed) the game recomputes the entire weathermap, applying smoothing algorithims, or derriving each map from it's predecessor. Weathermaps are only used if you have set your dynamiclevel to 1 or greater, and, are using the bigmap set. At this time, there is still no functional change to the game, bigmap, or not. utils/maps.c: This program will generate ppm files from each of the weathermaps. Mostly for debugging, but curious DM's might find it useful to see the weather. garbled 2002-10-27 server/c_chat.c: Fix some buffer overflow issues - use snprintf or use new_draw_info_format instead. lib/artifacts: Update some cloaks not to require a minimum magic level, since that will never be met. MSW 2002-10-16 Minor bugfixes: common/living.c: Fix it so that if you die, you won't _gain_ exp in any skills - could happen if new table is harder - 3 level loss could still mean having higher exp total. common/map.c: Fix on_same_map so check to see if either object has null map value - prevents crashes. MSW 2002-10-13 Experience cleanup - the main functional change is that no upper limit of exp in an individual skill, save for the limit that there is an upper limit of total exp a player can have. Thus, if a player concentrates complete in one skill, he could get to level 110 in it. A lot of code cleanup was done - so much had gotten added to the exp code that it was a real mess. common/living.c: re-arrange some of the code, so all the exp related functions are together. remove adjust_exp(), change check_dm_add_exp_to_obj() to check_exp_adjust. Add new functions add_player_exp(), check_exp_loss(), check_exp_add(), subtract_player_exp(). include/libproto.h: rebuilt. server/c_wiz.c: Update command_addexp() to use new exp functions. server/gods.c: Update lose_priest_exp() to use new exp functions. MSW 2002-10-11 configure, configure.ac: Remove --enable-old-layout option - that is more than 3+ years old now. Add --enable-dmalloc option so code can be compiled with dmalloc debugging without needing to change/rebuild the configure files. common/porting.c: Add stdarg.h to list of included files. include/autoconf.h.in: rebuilt, HAVE_LIBDMALLOC undef added. random_maps/square_spiral.c: fix bound checking value. MSW 2002-10-07 common/item.c: Fix bug with identified potions not getting set to proper name. MSW 2002-10-03 Bugfixes: Add golem_count element to player structure so we can properly detect when golem is destroyed. This fixes a crash in some places as the code tried to remove this already removed golem. Fix crash when null player maps. include/player.h: Add golem_count element to player structure. server/player.c: Add code in handle_newscs_player() that checks status of golem, clears op->contr->golem is value is bogus server/spell_effect.c, server/spell_util.c: Initialize golem_count value when golem is created. socket/request.c: Check for null map value. MSW 2002-10-02 Mostly bugfixes, but the addition of a wiz 'hide' command which makes the wiz out of sight so to speak. -- common/loader.l, common/loader.c: Fix bug where flag values were being saved with actual value of the flag (eg, 32768, 16, etc) instead of 1/0 value - Code effectively worked the same, just was a bit odd looking at save files. include/player.h: Add hidden element to player structure. include/sproto.h: Add command_hide(), update proto for players_on_map() lib/Makefile.am, lib/Makefile.in: add wizhelp/hide file. server/apply.c: Add error checking to converts so it doesn't crash if the converter doesn't have a proper other_arch. Modify shopmats so that they don't transport spell effects, like fireballs an burning hands. server/attack.c: Modify code so players can drain other players exp. server/c_misc.c: Modify various functions to not show info on hidden DM. server/c_wiz.c: Add command_hide(), clean up command_invisible() a bit. server/commands.c: Add hide command to dispatch table. server/main.c: Add code to not update players on map for hidden dm. server/player.c: Give hidden dm perpetual invisiblity. server/skills.c: Only get exp if you actually stole an item - fixes abuse whereby players who couldn't carry item could continually 'steal' it from monster and just gain exp. server/swap.c: modify players_on_map() to take addition arg to determine if real players on map should be shown, or if we shouldn't count hidden dms. socket/info.c: Modify code so that oldsockets don't get reports on high verbose messages. socket/metaserver.c: Modify metaserver update to not include hidden dms. utils/Makefile.in: update datestmp. MSW 2002-09-27 server/pet.c: Add check to pet_move() to make sure the space we are checking is within the map, and handle map tiling. MSW 2002-09-23 Various updates: NOTE - You need to install the updated archetypes (included below) if you run this code without the updated archs, you will likely find many things do not work. acinclude.m4 aclocal.m4 configure: more refinements for libpython detection. common/button.c: Two push_button() changes - have it check for ACTIVATE_ON_ PUSH/RELEASE to determine if the object should get activated. Also, change behaviour of TIMED_GATE so that multipart timed gates work. common/loader.l, loader.c: Update with acttivate_on_push/release doc/Developers/objects: Add notes about how to add flags to objects. include/define.h: add new FLAG_ values include/win32.h: update by pstolarc so it compiles on Win32. lib/archetypes: rebuilt MSW 2002-09-17 common/map.c: Fix problem with ordering in check_linked() - checking for NO_PASS was before checks for inventory checkers, resulting in inventory checkers that require the player to have an item not working. MSW 2002-09-15 ------------------------------------------------------------------------------ Changes for 1.4.0: server/disease.c: Change move_disease() somehwat - before, if you were not susceptible to a disease, it would never run its course. Yet you would still get stuck with the symptoms. there was a case on metalforge where a character had a symptom with no disease, and had immunity, yet was still getting stuck with the symptoms. Not sure if this change will help prevent that in the future or not. include/player.h: Change item_power in player structure to be 16 bits - 8 bit values were getting overflowed. MSW 2002-09-14 INSTALL: Update directions with new automake method. common/Makefile.am, common/Makefile.in: Fix code for building the libproto.h file - it was including loader.l and not loader.c common/exp.c: Add init_experience() and dump_experience() functions - init_experience() loads the experience table from a file. Add default experience table into this file common/init.c: Add call to init_experience() common/living.c: Remove experience tables - players can select the one they want by changing the exp_table file. Remove reference to new_levels[] - only levels[] is used now for the formentioned reason. include/config.h: Update notes about SIMPLE_EXP system. include/libproto.h: rebuilt. lib/Makefile.am, lib/Makefile.in: Add exp_table to list of files. lib/exp_table: New file that contains experience information. server/c_object.c: Modify command_take() to look for objects above the player to pick up, then objects below. This fixes the bug with not being able to use the take command on items from a chest the player opens without moving off the space. server/init.c: Add -mexp dump switch to dump the experience table. Allow the simple experience system to be set in the settings file. server/skill_util.c: Fix oddness in calc_skill_exp() which could result in add amounts of exp given. MSW 2002-09-10 include/sproto.h: rebuilt lib/help/killpets: New file lib/Makefile.in: Add help/killpets file. server/c_misc.c: Add command_kill_pets(). server/commands.c: add killpets command which kills your pets. server/monster.c: Add some code in check_enemy so that the enemy has to be a monster/generator/player to be considered valid - I was seeing things like arrows ending up as target enemies. MSW 2002-09-07 More bugfixes: common/loader.l, loader.c: Fix up the handling with speed with respect to style maps - the objects were still getting put on the active list. common/map.c: Fix up blocked_link() to behave more like the blocked_two() function - inventory checkers and door handling. Comment out blocked_two since it isn't used anymore. Modify load_objects to remove objects on style maps from the active list. Remove some of the debug messages about map loading. common/object.c: Add remove_from_active_list() function for use in map.c to remove objects from active list. common/porting.c: Comment out debug message if open_and_uncompress() can open a file - caller of the function should print out messages, and it really isn't much of an error in any case. include/libproto.h: rebuilt. random_maps/special.c: Modify place_special_exit() - this should fix bug of very large treasure maps - problem was if the generated map size was too small, when generate_random_map was called, it would generate a newly sized map that was much larger. Code was also re-arranged some to make it a little more readable. server/attack.c: Fix crash when creature may not have an owner and it kills something else. server/move.c: comment added - no code change. socket/request.c: Fix off by one error in esrv_send_animation() - rare condition as it only showed up when trying to send the last animation (zombie) - only an issue if the player is put on top of a zombie for some reason (no other space for them) - observed when leaving the random dungeon in the undead church in scorn without clearing out all the zombies first. MSW 2002-09-06 CHANGES: Update build instructions for the plugin. random_maps/square_spiral.c: Fix bug that could cause the search function to go off the edge of the map looking for a clear space. Doesn't happen often, but one crash did happen here. server/monster.c: Fix some bugs with monsters and wakeup - remove check for friendly that could never be true, and also fix logic so that monsters will now find the players. MSW 2002-09-05 common/button.c: Fix do_mood_floor() to look at all objects on space for something to effect, not just things above the moodfloor. server/attack.c: Add missing check to make sure the plugin exists before we try to access the plugin function. common/readlable.c: Fix crash caused by passing null value to mon_desc - check for non null was at end of { } do loop - check should be at the start. server/monster.c: Make it so that monsters with see invisible are not immune to blind - monster can be given appropriate resistance to make it so it is not effected by blind. MSW 2002-09-04 server/main.c: Move #endif in crypt_string to more proper place. server/monster.c: Fix bad if statement that may have been waking up monsters when they shouldn't have been. MSW 2002-09-03 This change mostly deals with improving behaviour of pet monstes. Most of the code is from K. Reinert - however, I did some code cleanup/ fixes related to pet monsters, so it is difficult to note where each piece of code came from. One thing this does fix is handling of multipart pets - these now work properly. common/map.c: Update comment for get_rangevector() - no code change. common/object.c: Add get_search_arr() which is used in pet monster code. This returns a semi random scrambling of the freearr array. doc/Developers/protocol: Update documentation about map1a protocol command. include/libproto.h, include/sproto.h: rebuilt. server/attack.c: Have drain attacks return 1 damage so that it is clear that you are actually hitting your opponent. Otherwise, you would get messages that 'you missed xyz', even though you are draining it. This extra point of damage shouldn't change balance in any significant way. server/monster.c: Update hnadling of enemies for pet monsters. It should more intelligently choose the monsters and not switch/clear the enemy field for no reason anymore. Change find_nearest_living_creature to use the get_search_arr() to more randomly choose direction of target - before, there was a proclivity to always look in the north direction. Modify can_hit() to look for closes part of enemy - otherwise, monsters may not attack opponents even if they were right next to them because they couldn't get to the enemies head. Remove move_object from this function - merged with move_ob in move.c server/move.c: Fix move_ob to use 'cleaner' code of move_object, but also have specific features that move_ob had (player handling). Before move_ob didn't handle multipart objects correctly, and the two functions were largely the same. Now move_object() just calls move_ob - the only difference in the functions is that move_ob() takes 3 parameters instead of 2 of move_object() (added parameter is originator). I think this should now mean multipart player objects may now work. server/pets.c: get_pet_enemy enhanced to be much smarter about selecting/finding things for the pet to attack. server/player.c: Remove commented out line of init_beforeplay MSW 2002-08-31 server/attack.c: Modify drain attack code so that if some agent of the player is doing the drain (eg, avatar, summoned monster, or even spell), player gets exp added to his total. Otherwise, the agent could suck all the exp out of the monster, resulting in no gain for the player. Also, fix bug in drain code where uninitialized value was being used if enemy had 0 protection to drain. MSW 2002-08-30 Various bugfixes: common/map.c: Change so that same logic is used to determine pclose/fclose that is used to determine popen/fopen - otherwise, compressed map files probably don't work properly. common/treasure.c: Do a memset to make sure entire treasureslist is set to sane values. lib/archetypes: Fix 'slaying' field (which determines spell name) in god_spelldirect_face_of_death and god_spelldirect_finger_of_death server/apply.c: Fix infinite loop if the player had cursed items that needed to be unapplied to apply an item - setting up next item iteration was inside if check when it shouldn't be. Also, print message to player if this is the case. server/monster.c: Better format some of the code for improved readability. Fix indentation of can_see_enemy. Clean up invisiblity check - may have fixed a bug - old code should have worked, but wasn't very readable. server/move.c: Fix some bad code from last checkin - didn't fix the crash on no floor for door type, and instead removed check type from next line by accident. server/player.c: Remove call for init_beforeplay - this is already properly called, and re-calling it resulted in some things being redone when they shouldn't be. server/skills.c: Add message if there is nothing to steal form the monster. server/spell_effect.c: Improve message when invisiblity duration is maximized. socket/init.c: change O_NDELAY to O_NONBLOCK of fcntl. MSW 2002-08-25 doc/Developers/objects: Update with new (better) information from Todd Mitchell. Doc is more complete, and now has an index which should make it easier to find things. server/move.c: Fix dereferencing NULL problem - was looking at op->above, but op could be NULL if the map had no objects on a space (typically not the case, but...) No reason I can see that we care about the object above - just process in normal order. MSW 2002-08-21 server/time.c: Possible fix for bug seen on metalforge - in move_player_mover, make sure we are working with the head of the monster. MSW 2002-08-13 More spoiler-html fixes - was not including attacktype information, but also fixed some formatting issues. common/item.c: Include attacktypes in describe_monster. doc/scripts/Makefile.in: Add monsters-extract.pl file. doc/spoiler-html/Makefile.in: Update to use ../scripts/monster-extract.pl file, remove monster-extract file. doc/spoiler-html/spoiler.html: rebuilt. MSW 2002-08-11 Fix spoiler-html generation to show resistances. Need to do normal spoiler next. Add a new docs/scripts directory to hold the common scripts, instead of spoiler, spoiler-html, playbook, and playbook-html each having their own copies. configure, configure.in: Add doc/scripts directory. doc/spoiler-html/Makefile.in: Update build directions to use ../scripts/items-extract.pl doc/spoiler-html/spoiler.html: Rebuilt with updated information. doc/scripts/Makefile.in: Makefile for directory. doc/scripts/items-extract.pl: perl version of the items-extract file. doc/spoiler-html/items-extract: awk version - no longer used. MSW 2002-08-02 common/item.c: Have describe monster show resistances of monsters - useful for spoiler output, as well probe spell. server/disease.c: Fix typo. MSW 2002-08-02 include/global.h: add FREE_AND_CLEAR_STR macro, relocate DELETE_STRING by the other macros. server/c_misc.c: Fix string printout in applymode function. server/disease.c: Update name_pl in diseases. server/player.c: replace FREE_AND_CLEAR with FREE_AND_CLEAR_STR - was freeing data that shouldn't be freed. MSW 2002-08-01 Various fixes: INSTALL: Update with note about --with-includes configure option. common/loader.c, common/loader.l: Add comment about flag_invis_undead include/define.h: Add FLAG_INVIS_UNDEAD lib/adm/map_info: Modify to not follow symbolic links. server/monster.c: Modify can_detect_enemy to be a bit more straightforward in its logic. Also, modify detection of invisible creatures - don't reduce duration, just return that the monster can detect the player. There were also spurious messages about the player being seen. Modify can_see_enemy to check FLAG_INVIS_UNDEAD, also fix broken comparison server/player.c: Clear FLAG_INVIS_UNDEAD when invisibility ends. Fix action_makes_visible() - had reverse logic on FLAG_MAKE_INVIS check, and a typo in the printed message. server/spell_effect.c: cast_invisible() to use FLAG_INVIS_UNDEAD - also check for maximum duration, and only search active objects when clearing enemy. server/weather.c: Fix off by one on comparision when intializing maps darkness when loading map from disk. In dawn_to_dusk, don't do further processing if the light hasn't changed. MSW 2002-07-29 Various bug fixes, add glyph spell: TODO: Updated common/map.c: Fix change_map_light() - if darkness was reduced to zero, it wouldn't properly notify the players or update the maps they are on. Also, make it more robust to handle changes by more than one. include/define.h: Increase NROFREALSPELLS include/spellist.h: Add glyph spell. include/spells.h: Add SP_GLYPH entry. server/attack.c: Fix up kill_object() - it has had some many various additions that it was difficult to follow the logic. It should also now do better check on skill objects when awarding experience. server/player.c: Add some checks/addition to properly deal with freeing the name_pl in the player object. Fix it so that if you are braced, you still won't attack friendly creatures. server/rune.c: Add cast_generic_rune() to handle the glyph and rune spell. server/spell_effect.c: Fix up some pointers in cast_cause_disease() - needed so that it works properly when embedded in a glyph. Have it return 1 even if no one caught anything - you still cast the spell, so you should lose the grace for it. server/spell_util.c: Fix some formatting. Break out the code dealing with rune into cast_generic_rune() socket/loop.c: Add flag to player command mapping, and update structure - if flag is set, command can only be issued when player is in play, and not when waiting at the quit or login prompt - fixes crashes where players could wait for the map to get swapped out (after quitting), and then looking at a space. socket/request.c: Fix map2cmd so that invisible players are drawn. MSW 2002-07-24 Add dm command 'freeze' which freezes a player from doing anything for some amount of time. include/sproto.h: rebuilt. lib/Makefile.in: Add freeze to wizhelp files. lib/wizhelp/freeze: New file. server/c_wiz.c: Add command_freeze(). Also, break out get_other_player_from_name() - several functions need the same logic of getting a player named X that is not us - making it a function reduces the duplicate code. Fix some formatting for some functions. server/commands.c: Add command_freeze to the dispatch table. MSW 2002-07-17 lib/Makefile.in: add a 'archonly' directive that only collects archetypes and doesn't collect images. lib/archetypes: rebuilt for fixes made to arches. lib/collect.pl.in: modified to take second parameter -ARCHONLY, that causes it not to save out animation, bmaps and faces file. server/apply.c: Change order of print when applying/unapplying - print out the 'you apply/unapply' before we print out the changes that applying the item does. It seems odd for it to be 'you feel stronger. you apply xyz'. Fix can_apply_object() so that if a player needs to unapply several items, the right return code is returned and we don't say the player has a choice. server/player.c: Fix missing clearing of player->next. MSW 2002-07-15 -- Start body commit notes -- Major commit. This adds body locations which is used for equipping items. Equipment has information which body part it gets equipped to, and monsters have information on how which body locations they can have. As part of this work, I also did a lot of code cleanup. To use this, you must use up to date archetypes - the ones included in this commit are fine - just make sure you install them. If you don't, players will not be able to equip items. common/arch.c: Initialize body_used to be same as body_info for archetypes - this way when monsters are created, they can start equipping items right away. common/exp.c: update new_exp() - some flags it checked for before no longer exist or have new names. common/info.c: describe_item() now takes second parameter - update dump_abilities to use new calling convention. common/item.c: Add table that describes the body_info locations and their names. Add functions that calculate item power for objects that don't have it set. Update display functions to show item_power in items. Update describe_monster() - use_horn/wand/rod merged into just use_range. Modify describe_item() to take second paramater - who the item is being described for. Show item_power in describe_item. common/living.c: Pull out MAXLEVEL from being defined in this file - define in in define.h, since other files use it. Add NUM_STATS define - replace hard coded values of having just 7 stats with it. Update change_abil to not display that the player has a new attacktype when equipping a bow that has it - fix_player() ignores the attacktype of the bow, so it was incorrect information. fix_player(): Initialize player ranges structure to null - will get filled in by code in function, updated to deal with updating the body_used data from body_info in the objects. Replace instances of last_heal with gen_sp_armour. Rearrange some code to make function more readable. common/loader.c, common/loader.l: Remove the variable_const information - no longer needed and confusing for new people when adding in new object elements. Add set_body_info() - parses the string from the load file and sets the appropriate array element. Add check_loaded_object() - does sanity checking for an object after finished loading - replaces need for long processing directive in the actual rules by having seperate function. Remove unused flags from load directives (apply_once, no_pretext, can_apply), add some new ones (item_power, gen_sp_armour), update others to can_use_range. Replace flag_links with simple array that contains the name for each corresponding flag. Update get_ob_diff to not use the V_ values and just include the actual string name - all recent changes have done this, just updated for old stuff. Update get_ob_diff to save new values that have been added. common/object.c: clear_object: Modify to use memset to clear the structure to zero - this is less error prone than listing all the specific values, and probably faster. Also, makes it easier to add new elements - no need to update object.c in most cases. common/player.c: Remove get_player_ob routine - this is now merged in with get_player_ob in server/player.c. Remove generate_ext_title - not used. common/readable.c: Update to pass second argument to describe_item. common/treasure.c: Update to calculate item_power of generated items. Clean up a lot of code formatting. Update add_abilities to use gen_sp_armour values, not last heal (note, it appears the last_heal values weren't being used before). Update calls to describe item to take second parameter. doc/Developers/objects: Update will_apply notes, add note about item_power, body location. include/define.h: Comment out unused flags (flag_apply_once, flag_paralyzed, flag_no_pretext, flag_ready_rod, flag_read_horn). Add flag_use_shield. rename flag_use_wand to flag_use_range. rename flag_ready_wand to flag_ready_range. Add flag_ready_scroll. Update ARMOUR_SPELLS access macro. Add AP_PRINT flag to apply flags. Add CAN_APPLY_.. return types for can_apply_object function. include/includes.h: add strftime, mktime checks to this file. include/libproto.h: rebuilt. include/living.h: Add NUM_STATS define, update extern declarations to use it for sizing. include/loader.h: remove the V_.. info and xbm_.. externs that were not used. include/newserver.h: Remove ext_tile information. include/object.h: Add Body_Locations structure, NUM_BODY_LOCATIONS define. Add definitions for WILL_APPLY values. Clean up object structure - formatting is now consistent, ordering of values groups values together more logically. Update all types to use the int8/int16/int32 types. Several unused fields removed. include/player.h: Update rangetype enum. Add unapplymode enum. Clean up player structure - type updates, unused fields removed, formatting fixed up. include/spells.h: remove range_name extern. Update SpellTypeFrom field to combine wand/rod/horn into spellMisc - none of the spell casting code was differentiating these. include/sproto.h: rebuilt. lib/Makefile.in: Add new help files (applymode, bind, brace) lib/archetypes: rebuilt for body_info, gen_sp_armour, item_power, can_use_shield information. lib/artifacts: updated for item_poer and gen_sp_armour changes. lib/treasures: remove unused _force for player treasure. plugin/plugin_python.c: Change FLAG_USE_WAND to FLAG_USE_RANGE. server/apply.c: Move stftime, mktime to include/includes.h. Remove draw_find() - one line function can just as easly be in the code itself. Update calls to long_desc to pass second parameter. move gravestone_text() to player.c file. Add direction parameter to apply_scroll() - in this way monsters can use it properly. Remove dead code. Update apply_special function. Add unapply_special(), get_item_from_body_location(), unapply_for_ob(), and can_apply_object() functions. server/attack.c: Remove SET_FLAG(op, FLAG_PARALYZED) line - no code was ever checking status of FLAG_PARALYZED. server/c_misc.c: add command_body() which dumps body information for player. Update who as idle element in player structure removed - was not being used by anything. Add command_applymode() to set players prefered unapply method. Remove calls to unlock_player() in various functions - unlock_player() has not done anything meaningful for a while. server/c_object.c: Modify long_desc to take a second parameter which is who is examing the object. this is needed so that we can pass it down to some of the lower level functions. Update calls to describe_item to pass this second parameter. remove FLAG_NO_PRETEXT code - no archetyps were using it. When examining objects, also tell player where to put them on. server/c_range.c: Update legal_range() - we now store the object that is responsible for a range in the player object, so code is much simpler. Update change_spell() to not destroy golem just by readying another spell - we now let players regain control of golems after switching to another range. Update change_spell to use item name of object for range description. server/c_wiz.c: remove reference to count_left from player object - field removed from structure. server/commands.c: add new commands (applymode, body) to command dispatch table. server/login.c: Remove unlock_player() and lock_player() and calls to it - current checking of names at login should be sufficient to prevent duplicates. Remove dead code from check_name. Update load/save code for unapply mode value. Add set_flag(op, FLAG_USE_SHIELD) if player is allowed to use armor - needed since flag_use_shield is really a class feature and so is not automatically updated for old player files. server/main.c: Remove references to count_left. memset marker object to NULL - seems to increase stability on metalforge server. server/monster.c: Many updates related to the body info - monsters follow some rules as players. Add monster_should_cast_spell function - monsters will use this for all spellcasting related actions (abilities, scrolls, wands, etc). Update for merged rod/horn/wand ranges. Update bow use by monsters - they don't actually need to equip it to fire - this way we don't need to constantly swap the monsters weapons between the bow and melee item. Use fire_bow from player.c for most of the work. Modify scroll usage - monster will use it when player is near, not when it first picks it up. Add FLAG_READY_SCROLL to denote the monster has a scroll to use. Also, monster now casts it in appropriate direciton. Merge the monster_use_wand/rod/horn into monster_use_range. Modify check_good_weapon and check_good_armour to just look at the stats of the two items without needing the monster to apply it first. server/player.c: Print motd in green so it is more noticable. Update get_player function to do work it did before as well as that of get_player_ob. Have get_player take a parameter which is the object of the player if he has one. Modify to use memset to clear the player structure - more sure fire than explicitly listing values to initialize. Remove calls to unlock_player. Modify fire_bow so that monsters can also use the function. Add fire_misc_object() to fire_wand/rod/horn - removes code from fire(). Add gravesetone_text() to this file. server/shop.c: Update to pass second parameter to describe_item(). server/skill_util.c: Update check_skill_to_fire since there are fewer rangetypes now. change range_scroll name to range_golem, as that is a bit more accurate for what it actually does. Modify show_skills() to show player his item power and total of items he has equipped. server/skills.c: Add second paramater to long_desc, remove references to count_left. server/spell_effect.c: Add second paramater to long_desc, remove references to count_left. Update range_scroll to range_golem server/spell_util.c: remove references to count_left. Update messages if player trying to cast where he can't with new range names. socket/info.c: Update range information and how we display what it is - we will use the object name of the range if available. Remove reference last_known_spell, last_shoot, last_spell, last_value player structure fields. socket/init.c: Remove ext_title information. socket/request.c: Add element for life_stealing in the resistance array. Remove references to idle, count_left in player structure. remove ext2 title information. MSW 2002-07-14 -- End body commit notes -- common/anim.c, common/button.c, common/friend.c, common/glue.c, common/init.c,common/logger.c, common/los.c, common/porting.c, common/time.c, common/utils.c, crossedit/png.c, crossedit/xutil.c, include/attack.h, include/config.h, include/map.h, include/material.h, include/newclient.h, include/skills.h, include/treasure.h, random_maps/decor.c, random_maps/door.c, random_maps/floor.c, random_maps/monster.c, random_maps/special.c, random_maps/standalone.c, random_maps/style.c, random_maps/wall.c, server/alchemy.c, server/c_chat.c, server/c_party.c, server/gods.c, server/hiscore.c, server/init.c, server/pets.c, server/resurrection.c, server/rune.c, server/time.c, socket/metaserver.c: Update banner copyright with proper contact information. MSW 2002-07-14 server/disease.c: Fix propogation of diseases with negative damage (these do a percent of the creatures damage). The new disease was getting a damage rating of 1 in all cases because we were passing a negative value to random_roll for the top end of the range. MSW 2002-07-08 common/arch.c: Add 'unlocked' match for item_matched_string. lib/help/drop, lib/help/dropall: Help files for these commands. lib/Makefile.in: Update to include help commands above. server/spell_effect.c: Fix formatting of summon_pet() function. Modified so that it no longers sucks player spellpoints when casting it via scroll - scrolls should not cast the player spellpoints. No idea why that code was there - in fact, casting off a scroll used more sp than casting from memory. Modify cast_cause_disease() function so that if the passed direction is 0, we refer to the facing and cast in that direction - this means spells of cause disease now work. Also perform some minor formatting changes in the function. TODO: Add not about inscription. MSW 2002-07-05 common/arch.c: Fix bug in item_matched_string which was matching all values (inverse in fact) when passed with count > 1 in matching string - missing ! operator. README: Update - remove note about windows client, since it is currently unsupported and could stop working in some future release. MSW 2002-07-05 ------------------------------------------------------------------------------ Changes for 1.3.0: 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 ------------------------------------------------------------------------------ Changes for 1.2.0: Makefile.in, include/version.h: Update for 1.2.0 release lib/Makefile.in: have it make an archive for the archetypes. MSW 2002-04-28 doc/Developers/protocol: Add documentation about the map2 protocol command. socket/request.c: Fix bad indentation for the map2 function. No actual functional code changes, but some comments updated. Running diff with the -w option will make the changes, or lack thereof, more viewable. MSW 2002-04-28 crossedit/xutil.c: Update to use name of png file. lib/archetypes: collected - pl_dragon arch changed a while back, with no new collect. lib/collect.pl.in: Add some notes about usage if no option is given or if --help is given. server/gods.c: Fix that resulted in weapon/armor restrictions not working. MSW 2002-04-23 Various minor bugfixes. Note the changes may appear larger than they really are due to formatting/indentation changes. Run diff -w to supress those: make_win32/installwin32.bat: Update for new image files. server/c_object.c: Fix SAVE_INTERVAL #ifdef block. It failed to compile as it was written. Simplify code, but it should have the same effect. server/move.c: Modify push_object so that if a player swaps position with his pet, we send a esrv_map_scroll. This should save bandwidth, and also prevents display corruption when fog of war on the client is in use. Add some new comments, adjust some formatting. server/player.c: Fix minor typo in comment. server/skills.c: Modify new_draw_info that is responsible for the "You pray" messages to not have the NDI_UNIQUE flag so that they can get batched up, depending on users value of output-count server/swap.c: Remove swapped out per player unique maps from the list of maps. Reduces cpu and memory consumption by a minor amount, and results in a cleaner 'maps command output. server/weather.c: Add standard crossfire banner to top of file. Modify long long declartion to just be a long. MSW 2002-04-20 socket/item.c: Add checks to esrv_move_object - before it just trusted the client that the destination target to move items into was a container. Now do valid checking that the object can be picked up, that the container can hold it, etc. MSW 2002-04-18 Add utils/crossloop.web.in script. This script is used on metalforge - it generates the backtrace file, compresses the core, and sends out mail. configure.in, configure: Rebuilt to make the crossloop.web script. utils/Makefile.in: Install the crossloop.web script. Include the crossloop.web.in script when making the archive. utils/crossloop.web.in: New file. MSW 2002-04-14 Update to improve image caching and faceset support in the client. The main change is adding the 'requestinfo image_info' and 'requestinfo image_sums' commands. common/image.c: Checksum the bmaps file when we load it - we send this as part of the image_info data. doc/Developers/protocol: Document the requestinfo data. include/global.h: Add extern for bmaps_checksum, and the define for ROTATE_RIGHT which is used for checksumming. include/newserver.h: Update SC version to 1027 so that clients can know if they can issue requestinfo commands. include/sockproto.h: rebuilt lib/adm/collect_images.pl: Add support for it to make a crossfire-images distribution that the client can use to bootstrap its image set. socket/image.c: Change SendFaceCmd to take a NewSocket parameter instead of a player parameter - in this way, it can be used before the AddMe command - this allows the client to download images before issuing that command. Add send_image_info and send_image_sums function which send the requestinfo data to the client. socket/loop.c: Move the askface command from the player commands to the newsocket commands. Add RequestInfo functino that determines the type of request and calls the specific function to deal with it. MSW 2002-03-25 ------------------------------------------------------------------------------ Changes for 1.1.0: Updates for 1.1.0 release - pretty much all minor bug fixes, like compiler warning messages, invalid ANSI C constructs, missing files to include in the distribution. Makefile.in, include/version.h: update version. include/Makefile.in: Add some missing files include/libproto.h, sproto.h: rebuilt to prevent compiler warnings lib/Makefile.in: Include the wizhelp files in the archive. server/apply.c, server/skill_util.c: fix invalid code (function parameter names can't match structs/typedefs), add a missing return value. server/c_move.c, server/c_new.c, server/c_object.c, server/commands.c, server/daemon.c: Don't include the sproto.h if CEXTRACT is defined. server/plugins.c: fix printf command that was printing wrong value type. doc/spoiler-html/Makefile.in: Remove extraneous newline server/player.c: modify play_again to remove the player object if not done so already. This fixes a crash observed on metalforge when a player quit at the roll/swap stats prompt (undocumented that you can use 'q' then to do so). It looks like this should also fix crashes that may be associated with the kick and shutdown wiz commands. MSW 2002-03-12 Added new dragon race to crossfire. Players of this dragon race can gain resistances by eating the flesh of their defeated foes. They can also specify in a certain resistance-type and gain various abilities when increasing levels. This "focus" can be switched by eating very special As announced on cf-devel, this is the patch which adds a new dragon-race to Crossfire. Players of this dragon race can gain resistances by eating the flesh of their defeated foes. They can also specify in a certain resistance-type and gain various abilities when increasing levels. This "focus" can be switched by eating very special flesh, which will be available for sale. Dragon players gain special titles which cannot be overwritten by manually set titles. AndreasV 2002-03-01 lib/collect.pl.in: Modified so that it uses the image.base.xyz.png to make sure each listed face in objects has an image, and not the old xbm images for that task. Also, ignore all files that end in .png, .xpm, or the face extension - consider them legitimate files for the arch directory. MSW 2002-02-25 socket/image.c: Change type of image data to be uint8 from char. Checksums were being incorrectly calculated when using the char type. MSW 2002-02-25 server/main.c: If exit is damned, update players death & WoR home-position and delete town portal. server/apply.c: Fix bug in move_apply. return was used instead of goto leave, so recursion_depth wasn't decremented. mids 02/13/2002 server/spell_effect.c: Fix bug in summon_cult_monster that would result in crash if monster was killed when inserted. MSW 2002-02-10 common/map.c: load_map_header: If the map message is empty, don't copy uninitialized data as the message. This fixes various crashes. lib/Makefile.in: Remove the adm/*xpm* utilities, as they are no longer needed or distributed. server/apply.c: set the player speed to zero after they use a savebed. Fixes crashes with players that have constant image animation (fireborns) when they apply the savebed and the map then gets swapped out. server/plugins.c: Fix some serious memory leaks. Some still remain, with my comments included. server/skills.c: Removed unused variable. MSW 2002-02-05 include/player.h include/sproto.h server/c_chat.c server/player.c: New player command 'reply', replies to the last person who told you something. server/c_wiz.c: New DM command 'teleport', lets a DM teleport next to target player, it is an inverse summon. server/commands.c: Add hooks for 'reply' and 'teleport'. mids 2002-01-16 TODO: updated with bugs, remove things that have been done and are no longer TODO's. configure.in, configure: Remove lib/xpmtopix.pl file form those to be built, as that file has been removed. common/object.c: Fix bug in check_walk_on which would result in spell objects not being properly processed - the intention is not to process spell objects - we should stop going up (in previous loop) when we get such an object, not on the way down. This fixes directors not working really well. MSW 2001-01-13 Add the concept of overlay maps to the code. An overlay map is a map which is loaded on top of another map, replacing values in the header, and placing objects on top of other objects. This is the fundamental part of the new weather code, but also can be used to allow dynamic editing of the worldmaps by DM's eventually. garbled 2002-01-01 server/spell_effect.c: fix animate_bomb so that if the bomb is in a container, it does not crash the server - the problem was that it was calling drop, which would then drop it right back into the container. also, the x and y coordinates were not being properly set. MSW 2001-12-31 This change lets the server have multiple image sets. The client can then request which image set to use, and the server will use that image set, falling back to other sets as necessary. I have tested this with CVS client, and works fine at least in terms of old functionality. = doc/Makefile.in: Add images file which describes image guideline. doc/Protocol: Various updates - some things missing, added other notes about facesets. doc/images: New file, describes guidelines for image sets, as well as some of the internals include/newserver.h: Update for multiple image set - redid most of the image definitions as they were out of date with only png being supported. include/sockproto.h: rebuilt lib/Makefile.in: remove crossfire.png, add crossfire.0, crossfire.0. Update build directions to use crossfire.0 instead of crossfire.png lib/adm/collect_images.pl: Modified to collect all the image sets, remove support for collect xpm and xbm images. lib/crossfire.0: new file, base images lib/crossfire.1: new file, alternate images lib/image_info: New file, describes image sets. lib/crossfire.png, lib/xpmtopix.pl.in: Removed - no longer needed. socket/Makefile.in: add image.c file. socket/image.c: Moved all image related data in this file - this includes loading the image files, as well as the protocol commands. socket/init.c: move read_client_images to image.c file. set ns->faceset and ns->facecache to 0. Move freeing of image data to image.c socket/request.c: fixed some indentation inconsistencies.add setup commands for faceset as facecache. Move SetFaceMode,SendFaceCmd,esrv_send_face to image.c file. MSW 2001-12-31 common/loader.l, common/loader.c, common/object.c, include/object.h, socket/item.c: Remove sub_type and sub_type2 information - these were poorly named fields and not properly implemented. common/treasure.c: Add missing return type to change_treasure function. crossedit/Edit.c: Add SET_MAP_FLAGS macro to set P_NEED_UPDATE flag before calling update_position. include/config.h: Add NEW_WORLD_MAP selection which results in proper emergency save paths if you are using the maps-bigworld distribution. server/c_wiz.c: Fix the formatting (indentation) of the command_create function. No actual changes in how it runs, but the old formatting was really terrible and inconsistent. server/main.c: remove call to send_mapstats_cmd server/monster.c: Update the comment style to be proper, as well as the comments themselves. socket/request.c: Fix up improper indentation in esrv_update_stats. remove send_mapstats_cmd function. MSW 2001-12-23 Lots of changes here. Basically implement a night and day system, as well as tracking of game time. A clockdata file is now created and updated by the server to increment time. Time increases by 1 hour, approximately every 2 minutes of real time. Right now this code has virtually no effect, but as maps are updated with outdoor settings, nightfall will occur automatically. The time command has been modified to show the current game time, and the clock objects have been changed to show the game time as well. garbled 2001-12-18 common/map.c: Fix some bugs relating to map tiling. MSW 2001-12-16 common/object.c random_maps/Makefile.in server/c_wiz.c server/player.c server/plugins.c server/timers.c socket/request.c: Most of the changes are to just fix compiling warnings or errors so that it compiles on sparc solaris with the workshop compiler (things like }; should just be }). Declaration for alphasort was missing in plugins.c. random_maps/Makefile.in had the wrong order in linking - the system library needs to be linked in after the crossfire libraries. crossedit/App.c: Fix for running on 8 bit color - colormap was not being initialized to usuable default value. crossedit/xutil.c: Broken code when duplicating faces for undefined images. That code should never really be used, as pixmaps currently are always contiguous. MSW 2001-12-15 Include mapstats cmd for extended clients (sdl iso). Cmd is needed for automaps ambient media infos, map name and map parameter infos. Paramter infos are used for "fire & forget" animation tags inside the map2 cmd (next patch). server/main.c: include a automatic mapstats cmd every time the player enters a new map. Its the "default" mapenter cmd. The script event should used for special cases. include/sockproto.h and socket/request.c: include the mapstats cmd function. MT 2001-12-03 This checkin for the most part removes support for xpm and xbm graphics - now the only image supported is the png. common/arch.c: comment out printing on warning of object having no type - getting 300 meaningless messages at startup is annoying. common/image.c: Remove X11 color information from colorname array. Remove processing of color_fg and color_bg information from face file - only use color_fg if no magicmap information is available - foreground and background infoformation was only needed for bitmap graphics. common/loader.c, loader.l: Add elevation element, comment out some logging messages that are excessive and only really relevant for people who want to fix them (really should be in the collect script anyways). Remove some unused code. common/map.c: add outdoor field to map structure - add support for loading and saving it. crossedit/App.c,crossedit/CrUtil.c, crossedit/Defines.h, crossedit/crossedit.c crossedit/xutil.c: Remove support for non png graphics. crossedit/Attr.c: Add support for elevation variable, remove code for non png graphics. doc/map-technical: Add note about outdoor field. include/face.h: remove fg, bg fields from face struecture. include/global.h: Update colorname array definition. include/loader.h: Add V_ELEVATION field. include/map.h: Add outdoor field to map structure. include/newserver.h: Update types so it only loads/knows about png information. include/object.h: Add elevation field to object structure. lib/Makefile.in: Remove support for building crossfire.xpm and crossfire.xbm files. lib/animations, lib/archetypes, lib/bmaps, lib/bmaps.paths, lib/crossfire.png, lib/faces: Rebuilt. Main difference is a few sea types, and the fact that it hadn't been collected for a while. server/spell_effect.c: Modify dimension door so that it calls MapNewmapCmd so that fog of war does not get confused. Also, removes call to draw as functions further up will do that. server/spell_util.c: Remove color information from attack information that shuffle_attack uses. socket/init.c, socket/request.c: Remove support for non png images. MSW 2001-12-02 Various minor bugfixes - common/loader.c: rebuilt include/map.h: Change width,height,enter_x,enter_y to be 16 bit instead of 8 bits. lib/treasures: change skull treasure to tooth instead of skull_tooth since the later is not currently in the distributed archetypes file server/monster.c: Optimize some code, remove some other that is not used. server/plugins.c: Fix un initialized value in initPlugins that would cause crash at startup if plugin directory does not exist. MSW 2001-11-13 common/object.c: Modify copy_owner so that if a player is passed in as the object to copy, we properly set that player as the owner of the object instead of returning. This fixes the lack of exp when poison inflicted from a weapon kills something. MSW 2001-11-05 common/map.c: Fix bug in get_rangevector which was causing reverse of documented procedure. This also resulted in monsters not attacking adjacent creatures with physical attacks. MSW 2001-11-03 Add weapontypes to the game. These are currently used for nothing other than messages, which are not fully written yet. Players should not see them appear yet. Fix the bug where you opened a door with a key and saw "You ." Fix a bug in the PLUGIN code where current_weapon wasn't set when the player loaded from savefile. Take the setting of current_weapon out of #ifdef PLUGIN garbled 2001-10-31 server/spell_util.c: Add out_of_map check to can_see_monsterP. Fixes crash when casting ball lightning/divine shock (and likely other events) on maps not surrounded by walls. MSW 2001-10-07 New attacktype messages for damage. Now it gives you the message for the damage type you actually did. So if you are attacking with stormbringer, you get electrical or drain-based messages. Also added special messages for the attack-based skills like punching, karate, etc. garbled 2001-10-06 common/map.c: Add INS_ON_TOP flag to insert_ob_in_map calls to preserve stacking order. Modify update_position to generate map spaces with more proper order. common/object.c: Modify insert_ob_in_map so that it preserves stacking if INS_ON_TOP is set. crossedit/CrEdit.c: Add missing code that would draw third face on a space. include/object.h: Add INS_ON_TOP flag/define. random_maps/exit.c: Modify code so that if the random maps leading to a special map are reset, they will properly link in with an already loaded final map (and update exit from final map back up) as needed. Also fix bug in that if the final map has been reset, a new one will now be properly loaded. random_maps/random_map.c:Update minimum size to be 7 (up from 6) - fixes bug which caused crashes when square_spiral maps of 6x6 would fail to generate. random_maps/random_map.h,random_maps/room_gen_onion.c: move OPT_values from room_gen_onion to random_map.h since the square_spiral code uses them. random_maps/square_spiral.c: Update call to map_gen_onion to use OPT_.. values instead of constant integer. random_maps/treasure.c: Add some casts to sprintf statements to eliminate some compiler warnings. server/main.c: Modify enter_exit code such that a random map has reset, we generate a new random map. This can happen when the random_map resets before the map that leads to them resets. MSW 2001-10-06 Add a new command category called communications commands. Place tell, shout and say in here. Also create emotion functions. These functions have no real effect on the game, but make communications between players more colorful and fun. They are mostly fluff. Included with this patch are two new convenience functions, new_info_map_except, and new_info_map_except2, which allow the programmer to write to an entire map, except for certain individuals. garbled 2001-09-27 Add complete processing code for luck. This new code removes all previous instances of luck, and adds a few new convenience utilities. Now, every die roll in the game is affected by luck in some small way. This causes luck to be an intangible benefit to the player, without totally unbalancing the game. The new functions are random_roll, die_roll, and rndm, which should be used in place of RANDOM() whenever possible. garbled 2001-09-26 This checkin mainly fixes multipart teleporters - they should now work properly. Also a minor fix to make the new pickup code work. server/apply.c: apply_shop_mat rewritten to be more 'presentable'. Minor changes were needed in any case to pass the player/creature a a second object to teleport. server/c_object.c: change the sscanf to be unsigned when getting value for new pickup mode. At least on my system, if the value in the string was larger than the max signed value, sscanf set it to the max value. server/move.c: teleport function largely re-written. Instead of the third arg being the 'originator', it is now the object to teleport. This allows the head of the teleporter to get passed to this function even if the object to teleport is not on the head. server/time.c: move_teleporter modified to also check for objects on the other parts of multipart teleporters. Also, pass the head object to the teleport function so that proper destination is used. MSW 2001-09-02 Add Nils Lohner patch that new selections to the pickup mode. include/define.h: Pickup type defines added. include/player.h: Change mode (pickup mode) to 32 bits. server/c_object.c: command_pickup function modified to support all the new pickup options. server/player.c: Fix for path_to_player to prevent crashes. Add check in move_player_attack just in case. check_pick function modified to support new pickup options. do_some_living modified to eat flesh items if player is starving and they don't have any food. server/spell_effect.c: cast_detection modified so that detect magic/curse will not show objects beneath the floor. Change so that detect_monster and detect_evil spells copy the face of what they detected - gives better appearance on client. socket/item.c: fix bug LookAt that ws checking blocked_los on wrong offset. MSW 2001-08-28 Enhancements to make monsters 'do the right thing' with relation to tiled maps (ie, will detect players and attack them if on an adjoining tiled maps). This involved a rewrite of path_to_player - I've tested this out, and if anything, it seems that monsters may be more aggressive on spellcasting. ++ common/map.c: blocked modify to make sure it is checking valid coordinate value. blocked_link,blocked_two modified to translate for tiled maps. Add load_and_link_tiled_map which loads a tiled map and links in all pointers relative to adjoining maps. out_of_map modified to use this function instead of doing the work itself. Add get_rangevector function that returns offset, direction, and distance between two objects, taking into account tiled maps. get_rangevector_from_mapcoord added which is similar to get_rangevector, but takes a map and coordinates instead of a second object. on_same_map function added which returns true if the two objects are on the same logical (ie tiled) maps. doc/crossfire.doc: Add note about what Int does for monsters. include/map.h: Add some comments, and add structure for rangevector function return values. server/attack.c: add calls to on_same_map instead of doing op->map comparisons. server/monster.c: Many functions modified to properly handle tiled maps properly. server/pets.c: get_pet_enemy modified to know about tiled maps. server/player.c: get_nearest_player modified to know about tiled maps. path_to_player rewritten to know about tiled maps - I think some other bugs were also fixed in return values. Split player_attack_door from move_player attack to keep functions a more reasonable size. move_player_attack, player_can_view modified to know about tiled maps. server/skills.c: can detect_enemy modified to take another parameter - call in steal updated to pass this parameter. server/spell_util.c: ok_to_put_more, can_see_monsterP modified to handle tiled maps properly. socket/item.c: look_at modified to return proper results when player looks at something on an adjoining tiled map. ++ End of checkin common/object.c:decrease_ob_nr modified to correctly update client when player uses item from container that is on the ground (bookshelf for example) server/time.c: move_teleporter modified to skip over wall/floors and teleport whatever is above them. MSW 2001-08-05 common/map.c: modify link_multipart_objects to preserve name and title of head when making the more parts. modify update_position so that it should never show an invisible face to the player. common/object.c: fix check_walk_on so that spells will now properly get affected by spinners and directories. include/sockproto.h: Rebuilt to include MapNewmapCmd server/hiscore.c: Fix crash if player savebeds map on map which does not have a name. Use the path instead. server/move.c: modify teleporter function to send MapNewmapCmd to client if player got teleported. Needed for fog of war code. server/time.c: modify move_teleporter so that it will not teleport walls. socket/Makefile.in: Modified to use cproto to generate proto files. MSW 2001-08-04 common/Makefile.in crossedit/Makefile.in doc/Makefile.in doc/playbook-html/Makefile.in doc/spoiler/Makefile.in doc/spoiler-html/Makefile.in lib/Makefile.in lib/crossfire.png random_maps/Makefile.in socket/Makefile.in utils/Makefile.in: Fix up so that distclean now clears out all appropriate files - MSW 2001-08-01 common/map.c free_map Set in_memory status to MAP_SWAPPED - fixed bugs of maps not getting reset properly common/object.c: insert_ob_in_map - was passing wrong value to check_walk_on, resulting in some things not working as expected. doc/Protocol: Clarify how the sending of the version command works. server/move.c: move_ob redone. It should hopefully be more efficient (only' remove objects after verifying they can in fact move). IMO, code is also simpler, and hopefully has fewer bugs. socket/init.c: InitConnection - modified to set faces_sent[0] to one so that we will never send any information about face 0 to the client. facecode 0 is sent in the map1 command to clear spaces/layers. MSW 2001-07-30 Added support for the newmap cmd needed for the fog_of_war code in the gtk client. include/newserver.h: added newmapcmd:1 to NewSocket struct server/main.c: added call to MapNewmapCmd in enter_map() socket/init.c: init code for new newmapcmd value in NewSocket socket/request.c: deal with "newmapcmd" value in client setup string Added MapNewmapCmd( player* pl) function. SMACFIGGEN 2001-07-21 common/object.c: remove_ob - set P_NEED_UPDATE before calling update_position to prevent warnings from update_position being called with P_NEED_UPDATE being set. MSW 2001-07-19 socket/request.c: Fix bug in map1 command which resulted in it sending too much data with even maps. For example, if the client requested a 16x16 map, the server would effectively send a 17x17 map to the client. MSW 2001-07-19 +++ Major redo of map code: 1) Remove encounter map support (with the much better random map code, I don't see much reason for it) 2) Remove map_ob from map structure, and instead store relevant information in map structure itself. Remove strange meanings (stand_still meaning fixed reset time for example) 3) Redo internal structure of map and how information on each space was stored - this should make future extensions much easier, as well as making debugging easier. 4) Make USE_LIGHTING standard part of game. 5) Redo how lighting objects are handled - instead of making a linked list of the light giving objects, at field to mapspace that contains lightsource for the space. 6) Rewrite insert_ob_in_map to take optional parameter that determines other behaviour. This replaces insert_ob_in_map_simple. Function now does sorting of some objects, so performance for lots of spell objects on one space should be much better. 7) Change how multipart objects are saved. Now only save the head, and link in the rest of the parts when map is loaded. Additional parts linked in are put just above floor level when linked in, so things like shops won't hide items that someone drops on them. For monsters, this linking shouldn't be a problem - once they start moving, they will get relinked as normal (on top). 8) Modify update_object to only call update_position when necessary (ie, space attributes change). Otherwise, let the map transmission code call update_position when necessary (ie, in players view) - this saves cpu time as time will not be spent updating spaces that no one will see (before, how the space looks was updated whenever a space had an object added or removed). TODO: remove some things that have now been done. common/Makefile.in: Remove ltostr.c and sqrt.c from list of files common/ltostr.c, common/sqrt.c: Moved into porting.c common/anim.c, common/button.c, common/item.c: Update calls to update_object common/living.c: have fix_player calculate light value for player/monster. common/logger.c: Remove code that has server exit if too many LOG messages happen too quickly. This was not a reliable mechanism, and it should really be up to the functions doing the logging to know if they can continue or not. common/los.c: Changes on how it deals with lighting on maps - get light value from map space array instead of using the linked list. Functions that managed the light list have been removed. Change logic of line of sight function to be more efficient (before, we may examine the same space multiple times). rename update_all_los to update_all_map_los, and change update_all_los to take coordinates so that we only have clients within view of the change recalculate los. Also, have update_all_los check for tiled maps that may have clients that need to get updated. common/map.c: remove refresh_map - this used to be used to try to recover from map errors if many_cores was not set - IMO better to core and just restart and really fix the error than try to deal with possible corruption that may otherwise result. Move open_and_uncompress and close_and_delete functions to porting.c - they are 'common' functions that are not related to the map code. Remove some lighting related code, as that is no longer done with a list. Many modifications because of new map structure. And logic to load and save the new map structure format. Modify many of the functions to take map tiling into account. Change way multipart objects are saved, and add logic to relink objects when maps are loaded up. Remove some functions that are only used by the editor into the editor. Move update_position from object.c to map.c as it is better placed in map.c. Modify function to figure out light for a space. Make out_of_map a function that knows about map tiling. New function - get_map_from_coord which knows about map tiling and does coordinate and map translation. common/object.c: Have update_object take another parameter which tells update object what has changed about the object. This lets the function know if it should call update_position right away or if it can just mark the space as needing an update at a later time. move update_position to map.c. insert_ob_in_map: now takes another parameter that describes actions not to do. modified to know about map tiling and do appropriate translation. Does some object sorting so it should handle spell objects more efficiently. insert_ob_in_map_simple is now replaced by using appropriate flag to this changed version of insert_ob_in_map. Clean up remove_ob - seemed to have done things in a more complicated fashion that is no longer necessary. Modify check_walk_on to look at all objects on space, not those below the object - with changes to insert_ob_in_map, new object won't always be on top. common/porting.c: functions from ltostr.c, sqrt.c, as open_and_uncompress close_and_delete, make_path_to_file from map.c common/treasure.c: Modified to use updated insert_ob_in_map crossedit/Attr.c: Rename Layout to AppLayout so other files can use it. crossedit/CrEdit.c: Modified to use new map header. Modified drawing routines, as face values could be null crossedit/Edit.c: Move many functions from common/map.c that are only used here and thus don't need to be in common/map.c. Modify to use new map structure. crossedit/Makefile.in: Change to use cproto to make proto.h file. crossedit/png.c: change user_read_data to be static so proto doesn't pick it up. doc/Makefile.in: add map-technical to list of files. doc/crossfire.doc: remove map information that was in this file. doc/map-technical: new file. Describes inner workings of how the maps work. include/config.h: remove RANDOM_ENCOUNTERS (no longer available) and USE_LIGHTING (now standard part and always on). include/define.h: move P_... values to map.h include/global.h: add definition for compression externals, as they are used in a few files. remove map macro functions - moved to map.h as appropriate. Add FREE_AND_CLEAR macro that frees data and then sets the pointer to NULL. include/map.h: Largely redone - many new macros, new map structure. include/object.h: remove lights object link pointer from objects. At some #defines that are the flags for update_object and insert_ob_in_map include/player.h: Add a few comments. random_maps/decor.c,random_maps/door.c, random_maps/exit.c, random_maps/floor.c,random_maps/monster.c,random_maps/special.c, random_maps/standalone.c, random_maps/style.c,random_maps/treasure.c, random_maps/wall.c: modified to use modified insert_ob_in_map function, use new macros to access map structure related data server/Makefile.in: Remove encounter.c file. Use cproto instead of cextract to create proto file. server/alchemy.c,server/attack.c,server/c_object.c,server/c_wiz.c, server/disease.c, server/login.c, server/main.c, server/monster.c, server/move.c, server/pets.c, server/player.c, server/resurrection.c, server/rune.c, server/shop.c,server/skill_util.c, server/skills.c, server/spell_effect.c, server/spell_util.c, server/swap.c, server/time.c modified to use modified insert_ob_in_map function, use new macros to access map structure related data. change calls to update_all_los, remove lighting related code. server/apply.c: modified to use new insert_ob_in_map function. Update calls to update_object. remove RANDOM_ENCOUNTER code. for exits, modified to use the head for valid coordinates since the other parts may not have valid values since they are not saved out to disk anymore. server/c_misc.c,server/hiscore.c: modified to use new map structure/information. server/commands.c: remove dumplights command. server/encounter.c: removed - code no longer used server/init.c: remove RANDOM_ENCOUNTERS code. server/script.c: change Script_getMapObject to return NULL since there is no longer a map object. Modify to use new insert_ob_in_map and update_object functions. socket/info.c: Modified to use new map structure/macros socket/request.c: Modify draw_map_routines to use get_map_from_coord so that it properly deals with tiled maps. Modified to deal with potentially NULL face values. Modified update routine to call update_position for spaces within player view which need an update MSW 2001-07-13 +++ common/object.c, common/player.c, include/object.h, server/skill_util.c: Remove the unused LINKED_SKILL code. common/Makefile.in: Use cproto to make prototypes - cextract fails for some reason and now seems unsupported. Cproto generates a bunch of warnings, but does do the job. common/arch.c,server/apply.c, server/main.c, server/monster.c: cleanup some compile warnings (unusued variables, returns without value doc/playbook/Makefile.in: Create proper dependencies for files. doc/playbook/treas2-extract: Add player_force to value to ignore. doc/spoiler-html/spoiler.html: rebuilt server/skill_util.c: Remove the unused LINKED_SKILL code. Prevent characters that have meditation skill from learning melee weapon skill. MSW 2001-06-28 doc/Protocol: Add 'darkness' setup option documentation. include/newserver.h: add darkness element to socket structure. include/script.h,server/script.c: remove static declaration from script.h, move it to script.c socket/init.c: init darkness element in socket structure. socket/request.c: Add support in setup command for client to set if it wants darkness information or not. Modify map update functions such that if the client does want darkness information, server does not send it. Improve darkness handling so that if using the map1 protocol command, send darkness for first blocked space due to darkness - this makes it possible for client to interpolate results better. MSW 2001-06-16 common/item.c: Add boots and gloves to items which are not magical just because they have resist physical. This bug resulted in most all boots and gloves being shown as magical, even though they had no special properties. socket/request.c: remove some dead code. Memset entire map cell to zero when scrolling and the map is cells is one that was not in view. This fixes redraw problems when using large viewable maps. MSW 2001-06-11 doc/Protocol: update information for the mapcmd, add map1cmd to section of setup commands. include/newserver.h,socket/init.c: add map1cmd element to socket structure that determines which protocol (map,map1) will be used for sending the map. socket/request.c:add 'map1cmd' to list of setup options. when sending the map, use the map1cmd element to determine what protocol command to use to send it. MSW 2001-06-07 server/shop.c: Fix bug that resulted in items in shop being paid, as well as not generating proper listing. MSW 2001-06-06. Checkin of code that supports larger map sizes (configurable in config.h). common/los.c: update los code since it only handled 11x11 maps. Now uses formulatic approach so any map size should be supported. This does result in a few more spaces getting blocked around corners, but it doesn't seem that bad - certainly not compared to the ability to have larger viewable maps. common/map.c, crossedit/CrEdit.c, crossedit/Edit.c, include/global.h, include/map.h,random_maps/monster.c,random_maps/special.c, random_maps/standalone.c, server/apply.c,server/c_misc.c, server/spell_effect.c,socket/info.c: change mapx,mapy to what they really point to, as it prevented using those as variable/structure element names. common/object.c: update_position - if faces for different layers are duplicate, set the duplicates to be blank to increase client update efficiency. doc/Protocol: Add map1 command description, update setup command to describe setting of mapsize. include/config.h: add MAP_CLIENT_X/Y to set maximum map size we can send to the client. include/newserver.h: add mapx, mapy values to socket structure include/player.h: Use MAP_CLIENT_X/Y for sizing arrays that hold map related information in player structure. server/player.c: As per player.h above, use appropriate sizing when initializing player stucture. server/shop.c: Update mapx,mapy like above, but re-do shop listings code as it was doing a lot more work than necessarily (I think some changes got put in for sorting, and the old object manipulation was never removed when that got done) socket/init.c: set default client map size to 11x11 in the socket. socket/item.c: LookAt - change checks for position checking (such that you can only look at things in bounds) use max viewable map size. socket/request.c: Make setup commands a little more forgiving if there are extra spaces. Add 'mapsize' command to setup command. Update old map sending code to use socket map sizes (to support even smaller than normal maps, or 13x13 or 15x15 maps). add draw_client_map1 command which implements the map1 protocol command. MSW 2001-06-03 random_maps/treasure.c, wall.c: fix a problem where hidden doors surrounding a treasure could destroy exits. --PeterM 5/31/2001 Make ALLOW_SKILLS standard part of game (remove #ifdef's for it) Files affected: common/living.c common/object.c common/treasure.c include/config.h include/player.h server/apply.c server/attack.c server/c_move.c server/c_range.c server/c_wiz.c server/commands.c server/init.c server/login.c server/monster.c server/player.c server/rune.c server/skill_util.c server/spell_util.c Make MULTIPLE_GODS standards part of game (remove #ifdefs for it) Files affected: common/readable.c include/spellist.h include/config.h server/attack.c server/gods.c server/skills.c server/spell_effect.c server/spell_util.c doc/Makefile.in, doc/Protocol: Add protocol description file here instead of in the client distribution. include/global.h: Move declaration of MAX_EXP_CAT near top of file so it is set before player.h is included. include/newclient.h: Add CS_STAT_SKILL* values for sending skill experience information to client. include/newserver.h: Add skillexp value to socket struct which determines if client wants skill experience informatiion. include/player.h: Add skill information tracking to player structure so we can easily know when to send updates to client. random_maps/expand2x.c: remove unused variable to prevent compiler warnings. random_maps/square_spiral.c: Include prototype information on all systems, not just win32 to prevent compiler warnings. server/skill_util.c: Initialize skill pointers to make it easier to find skill information when we want to update client. socket/init.c: Init socket->skillexp to 0. socket/loop.c: Fix indentation of table - whitespace change only socket/metaserver.c: Minor fix to prevent compile warnings (on the sprintf that composes the data to send to the metaserver) socket/request.c: Redo SetUp function to be more compact and IMO simpler as wll as easier to read (functionality remains the same). VersionCmd modified to warn users of on dxclients (code on MT) StatsCmd added to send skill information if client wants it. The sending of skill experience is by MT, rest of the changes by me. MSW 2001-05-28 common/readable.c: When making recipe books, give the recipe that they are for in the title. Makes it more worthwhile to buy them. lib/treasures.c: Increase the chance of readables in chests some (in fact, add a chance.) MSW 2001-05-25 lib/artifacts: Reduce potency of Poison artifact foods. server/apply.c: When eating poison artifact foods, hit player with poison attacktype instead of just subtracting hp. This way people with poison resistance get proper benefit. MSW 2001-05-24 doc/metaserver, doc/Makefile.in: Add metaserver file which describes working of metaserver and format of data fields. socket/metaserver.c: Add reporting of inbytes, output bytes, and uptime in seconds to notification of metaserver MSW 2001-05-24 server/player.c common/living.c include/libproto.h: New experience loss on death policy implemented. (As per consensus.) 3 levels or 20%, whichever is less. --PeterM 5/24/2001 server/spell_util.c: Fix typo in polymorph code (when enabled in config.h) MSW 2001-05-24 server/disease.c: replace disease->owner check with get_owner. MSW 2001-05-24 server/pets.c: pet_move - fix formatting to be 4 space indentation. if we remove the monster, free it here instead of having move_monster do it. Add check for was_destroyed after first call to move_ob - crashes have been observed in that function, and I believe that is the cause. server/monster.c: move_monster: let pet_move free the pet if necessary. server/spell_effect.c: Clear sleeping flag of monsters when casting summon pet monster (or other creatures). Some archs have this value on by default, so the monsters don't follow the player until an enemy is found. MSW 2001-05-22 socket/item.c: Don't raise player to top of stack when they look at something. I think this may be causing server crashes in some circumstances - plus its not really needed anyways. socket/loop.c: block_until_new_connections: Add call to flush_old_maps so maps are reset while waiting for a new player. MSW 2001-05-22 configure.in, configure: Fix png and Xpm library detection. Suggested patch by Yann Chackhoff, applied by MSW 2001-05-20 ------------------------------------------------------------------------------ Changes for 1.0.0: common/living.c: Fix AC wrapping problem - now limit ac to +/- 120. MSW 2001-05-12 include/config.h: Add NO_POLYMORPH feature selection include/spellist.h: If NO_POLYMORPH is set, make it so that polymorph will not show up in wands/rods server/spell_util.c: Handling for NO_POLYMORPH selection MSW 2001-05-11 server/rune.c: Make sure rune message is newline terminated. Fix map corruption problem. MSW 2001-05-10 Various improvements to make finding memory leaks easier. common/anim.c: Add free_all_anim function common/arch.c: Modify free_all_arch to free more data common/init.c: If running under MEMORY_DEBUG, don't pre-allocate objects. common/map.c: Add free_all_maps functiion. common/object.c: Modify object allocations if using MEMORY_DEBUG to only malloc one object at a time, and not pre-allocate objects. common/readable.c: Fix memory leak. common/shstr.c: Include autoconf.h so it can pull in dmalloc.h file. include/config.h: Remove notes of what was removed a long time ago. Add MEMORY_DEBUG option. include/libproto.h, include/sockproto.h, include/sproto.h: automatic rebuild server/c_misc.c: Fix 'malloc info command so it reports right memory total for maps. Add command_style_map_info which sums up memory used by style maps. server/commands.c: Add style_info wiz command which dumps memory usage for style maps. server/init.c: Have sighup handler call cleanup function. server/main.c: Fix clean_tmp_files which could result in crash if one of the maps in memory has 0 reset time. Modify cleanup function to free more data. server/player.c: op_on_battleground: Fix compile warning about unuused variable. socket/init.c: Change name of free_all_ericserver to free_all_newserver, have it free all face data. MSW 2001-05-08 socket/item.c: Modify look_at to not stop when it finds the first invisible object. server/monster.c: Modify monster_check_pickup to check to see if the next object got destroyed. I'm not sure the exact way this happens, but I've seen one crash where this did happen - I'm guess some function further down in the monster_check_apply look may call this or destroy the item. MSW 2001-05-01 common/object.c: Add clear_owner function. include/libproto.h: rebuild. server/player.c: Modify op_on_battleground to look for battleground anyplace on space. Temp for for wall of thorns on space - as long as maps don't try to abuse the use of battlegrounds, should be OK. server/time.c: Add clear_owner call to stop_arrow. Fixes problem of thrown objects not getting saved. MSW 2001-04-28 common/object.c: Have update_object map the look window for redraw if the object is not something the client normally animates (like a lever). MSW 2001-04-27 server/apply.c: Modify apply_id_altar check for player - had a && instead of a ||. socket/item.c: Modify ApplyCmd so a removed player can not apply objects. Fix crashes caused by players applying savebeds after they have used the bed. MSW 2001-04-26 server/spell_util.c: have put_a_monster generate random monster abilities. TODO, doc/mapguide: Various minor updates. MSW 2001-04-25 server/c_object.c: Pass right object to query_cost_string so that if you pick up an unpaid object into a container, it generates the correct price. MSW 2001-04-22 server/c_wiz.c: fix shutdown and reset_map wizard commands/function so they no longer crash the server. MSW 2001-04-22 server/monster.c: add check to was_destroyed when monster fires an arrow. Call was certainly missing, and appears to be responsible for crash. MSW 2001-04-20 server/player.c: Clear op->chosen_skill when we get to the play_again prompt. Otherwise, the server may try to use this later on, and it no longer points to a valid object, so it results in a crash. MSW 2001-04-19 server/skill_util.c: Add missing call to out_of_map in skill_attack which could result in crashes if player is at edge of maps and decides to attack in direction off map. MSW 2001-04-18 server/attack.c: Remove error message about golem without owners, also add better checking before clering the op->contr->golem field. common/map.c: set status flag on maps to MAP_SAVING so remove_ob does not do extra work when we are deleting a map (ie, immediate reset) from emory. server/skills.c: If someone is stolen from a player, send an esrv_delete_item to the client so the clients inventory remains correct. MSW 2001-04-16 common/re-cmp.c: Modify re_cmp functiion so that it properly matches strings not at the start 'ie, dude chain will now match against the chain value'. server/monster.c: Properly alter direction monster moves if they are feared or confused. It was properly altering direction when monsters were using range attacks, but not if they were just wanting to move. MSW 2001-04-12 common/living.c: Don't use the last_heal object in experience objects as sp regen penalty. This should fix the problem of inconsistent sp regen rates - last_heal is used in experience objects if the permanent experience option is turned on. MSW 2001-04-11 PeterM: server/spell_util.c: fix peace so it gives experience common/button.c: change the "error" to a "debug" message to reduce server crashing. ------------------------------------------------------------------------------ Changes for 0.98.0: server/skills.c: Modify inscription so that when inscribing cleric spells, it reduces grace. Before, reduced mana no matter the type of spell. server/c_object.c: Fix bug in pick_up where it was not using the right count for picking up objects if the player did not specify one. This allowed players to put objects into containers that should not really fit. server/player.c: Don't let players shoot arrows at themself. Also, minor changes to use new_draw_info_format. server/swap.c: If recycle temp maps, don't save out random maps to get recycled. MSW 2001/04/07 PeterM 2001/04/06: include/libproto.h common/object.c server/apply.c server/spell_util.c Added a new function: instead of stacking many burnout or firetrail objects, only 1 per square is added. Real reduction in server overhead. No reduction in cosmetic effect. common/porting.c: Fix compile warnings/bugs introduced by Win32 changes. server/time.c: Modify move_player_mover so that it determines direction of the mover and then process accordingly, as well as formatting changes. server/c_object.c: modify examine so that it properly shows info about magic bullet spell books. MSW 2001-04-05 common/item.c: Modify identify function to clear the NO_SKILL_IDENT flag so objects will now merge. Also, once the object has been identified, the no_skill_ident doesn't have meaning anymore. MSW 2001-04-03 server/c_object: Modify examine command to only be able to examine valid objects, and not whatever is on top of the space, which may be insivisible. MSW 2001-04-01 include/sproto.h, server/c_wiz.c server/main.c server/player.c socket/loop.c: Modify leave function to take a second parameter that determines if it should print a message about the player leaving the game or not. Proper use of this prevents duplicate XXX left the game messages. MSW 2001-03-29 common/image.c, include/define.h, include/global.h: Add empty_face structure and appropriate code to initialize it. This is used for the server side look selection. include/newserver.h: Add NUM_LOOK_OBJECTS to control number of look objects to send at any one time. add look_position field to the newsocket structure. server/move.c: clear look position as player moves. server/player.c: initalize look_position element in structure. socket/item.c: modify esrv_draw_look to sne NUM_LOOK_OBJECTS at any one time, and to also send pseudo objects that lets the player scroll up and down. modify ApplyCmd so that if it detects the application of one pseudo objects to adjust the look_position. MSW 2001-03-29 common/readable.c: Name spellbooks based on level of spell, and not just randomly. Patch by Preston Crow, applied by Mark Wedel 2001-03-29 configure, configure.in, include/autoconf.h, includes.h: add check for time.h and include it if we find it. socket/item.c: esrv_move_object - have it check to see if the object is already on the ground before we try to re-drop it. Likewise, check to see if it is already in players inventory before we try to pick it up. common/object.c: Don't send face updates to the client or make the space as needing to be redrawn. Client now deals with animation of the look window on its own. utils/(metaserver.pl crossloop add_throw.perl crossloop.pl) lib/(Makefie.in, checkarch.pl collect.pl xpmtopix.pl) - - deleted from CVS - '.in' versions of these files now exist and the real versions are created as part of the configure process. Update Makefile.in to reflect this change. MSW 2001/03/28 common/object.c: have update_position just update the flag that the server needs to send the look window to the client and don't send the item at this point, as sending the look will do that. server/main.c: process_players1: Remove call to draw (which updates the client map) - the handle newclient in socket/loop.c already does this and there is no reason to send multiple instances of the same map. MSW 2001/03/23 server/c_object.c: drop_object function: send delete item to client as item is dropped. This fixes a problem of phantom objects in the inventory. Unrelated change to not call esrv_send_item for objects that are dropped - esrv_draw_look will get called later on and will update this at that time. MSW 2001/03/23 server/c_object.c: Update the return value for some matches - they function was returning immediately when it got a match, but did not give them a high match value, so searching for 'key ring' used to return a match value of 6 or so on the key ring, but a 14 on a key. common/object.c: Modify find_free_spot to call arch_out_of_map so that it properly deals with multipart objects. server/main.c: Fix enter_map so that we first use the golem (and not player) when calling find_free_spot. Also, modify code so that it properly updates coordinates of the multipart golem. MSW 2001/03/20 server/skills.c: Fix orate so that we check for a positive chance (and just not nonzero chance) for successful oration. Due to adjustments, at low levels, the oratory chance can be negative. MSW 2001/03/20 server/spell_effect.c: Change cast_change_attr to find an enemy (and not friend) when casting the curse spell. MSW 2001/03/20 server/apply.c: Increase size of buf to be a HUGE_BUF to very long item names don't cause a stack overflow. MSW 2001/03/20 common/object.c: Modify update_position so that we don't show invisible players to other players. MSW 2001/03/20 ------------------------------------------------------------------------------ Changes for 0.97.0: MSW 2001/03/18: common/init.c: add RESET_LOCATION_TIME initializer to settings structure. include/config.h: Add RESET_LOCATION_TIME value. If nonzero and the save was longer than the specified time in seconds, player will be returned home upon login from save. include/global.h: Add reset_loc_time field to settings structure. server/login.c: Remove some unused variables, add support to return player home as described above. server/spell_effect.c: Fix for crashes when casting control undead and your god does not have an enemy. Now properly check to make sure we are not dereferencing null pointers. MSW 2001/03/16: Change code so that if player dies and loading the players savebed map does not work, return player to EMERGENCY_MAPPATH instead. New function added to server/main.c called enter_player_savebed which does the work, Files changed: include/sproto.h server/main.c server/player.c server/spell_effect.c (comment added) Unrelated change: Remove messages about multiple resist types set. Files changed: common/loader.l common/loader.c MSW 2001/03/15: server/spell_effect.c: Add physical attacktype when casting holy possession. Otherwise, characters who use karate end up not being able to damaage anything. MSW 2001/03/09: crossedit/App.c: Move the loading of images to later in the editor startup state. In this way, the client can allocate the colors it needs for its windows before the the png images use up all the colors. crossedit/png.c: New png loader implementation. New version is much faster (50 times faster). As part of this, only 8 bit displays, a private colormap will be allocated, and after that gets filled up, a color mapping routine will be used - this makes the png images loadable on an 8 bit system in addition to the speedup. crossedit/xutil.c: Adding timing information for loading of images. call init_pngx_loader before starting to load png images. Pass colormap to png_to_xpixmap by pointer and not value so that the loader can change the colormap. AV 2001/03/09: common/button.c: Added new attribute to altar triggers: "last_sp 1". If set, the altar trigger will push the connected value only by dropping the sacrifice, NOT by altar reset. If unset ("last_sp 0") it will work like it used to (push by sacrifice and by reset). MSW 2001/03/06: server/spell_effect.c: Fix message when consecration fails - use the ob->name field and not the ob->title field. Also fix broken logic that checked for the floor. server/init.c: Related to 3-4 change which changed the default name of the logfile to "" so we know to use stderr. This doesn't work for daemon mode, so if the name is "", we use the default logfile instead. MSW 2001/03/04: TODO: add re-connecting player to new client if client logs in with right name/password. common/init.c: Open up the logfile with the provide filename when given the -log option. server/init.c: Make set_logfile a first pass option so the init_library has the right logfile name to work with. server/main.c: Fix crash if map has an exit path yet that file does not exist. Give proper error message. MSW 2001/03/01: server/main.c: Modified random_map code so the server will not crash if the exit object has no message (and thus variables to set for the random map). Modified so that golems move away from player when player changes map. Values were reversed before, causing the golem to move towards the player. MSW 2001/02/25: General player login cleanup. This should fix the crash when players re-roll stats too often. So far, it also seems to have the additional effect that calculated players on map now appears to be correct. common/player.c: No longer allocate the player object structure in get_player_ob (function is really misnamed). Callers to this function were not using the allocated function. server/login.c: Add leave_map call when player is loaded. server/main.c: Add leave_map function. server/player.c: Move get_player function to start of file - can declare it static that way. Move some initialize from add_player to get_player. Add set_first_map function. Add appropriate calls to leave_map and set_first_map when players join and leaves the game. MSW 2001/02/22: TODO: Add some items, remove some others, remove outline of future versions, since it was out of date. common/loader.l,loader.c: Declare msgbuf a static outside the lex_load function. lex_load was otherwise clearing it each time it was called, which resulted in empty messages for the random artifacts (since the call lex_load one line at a time). Instead, we just zero this at start of load_object. Original reason of this change was due to purify errors - as I look at the code, it appears even before these changes that it was clearing the buffer properly. common/map.c: removing pending field from map objects. common/re-cmp.c: Comment out some code which was resulting in too many false compares. include/config.h: increase default for MAX_OBJECTS. 6000 is a bit small on current systems. include/map.h: Remove pending field from map structure. random_maps/treasure.c: Increase size of doorlist. Fixes crash, in that if a random map could place 8 doors around the treasure, the list was not terminated, so the problem would eventually try to read/dereference random memory after the array. server/c_misc.c: Remove pending field from maps, so remove functions and other places that referred to it (like the maps command) server/c_wiz.c: fix up wiz map reset command. Not really tested, but old code had some definate problems just from visual inspection. server/main.c: Further fix for unique exits - relative paths to unique maps from non unique maps should now work. server/monster.c: Various fixes - one is that should get more reliable distance values for multipart monsters. Second, modify dist_att to calculate from closest part of monster, and not the head of the monster. server/pets.c: Remove code dealing with pending objects. server/player.c: Don't remove invisible objects in players inventory when playing with permadeath mode. server/spell_util.c: If you try to cast denied spell, it no longer costs any spellpoints. socket/item.c: Fix bug where it was using 'item' protocol command instead of 'item1' End of MSW 2001/02/22 checkin. ------------------------------------------------------------------------------ Changes for 0.96.0: 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 ------------------------------------------------------------------------------ Changes for 0.95.8: MSW 2000/11/26: utils/metaserver.pl (added), utils/Makefile.in: Add metaserver.pl script. MSW 2000/11/25: include/patchlevel.h (removed), doc/spell-docs/Makefile (removed), include/Makefile.in, include/version.h, server/init.c, server/main.c, socket/metaserver.c: remove patchlevel.h - include the patchlevel in the version.h file, update other files to use version as a single string. MSW 2000/11/25: socket/metaserver.c: If on FreeBSD systems, do not attempt to connect to the metaserve. FreeBSD seems to have a problem using sendto on a connected soccket. MSW 2000/11/25: configure.in, configure, include/autoconf.h.in, server/main.c: Update to check for libdes.a and des.h and use those for password decryption - fixes a problem on freebsd if it is using md5 crypt. Hopefully it doesn't break anything. main.c was also checking for HAVE_CRYPT_H too early. include/sproto.h: Needed updating. Unrelated to above changes. MSW 2000/11/22 server/main.c: Modify enter_exit so that it properly uses per player 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/Makefile.in: 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/Makefile.in: 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. Change 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 or FLAG_ALIVE). 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 PeterM: ball lightning made stronger, strikes larger area, never hits player. divine shock spell added. include/sproto.h: Removed prototype of obsolete make_gravestone() function. 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: BEGIN: ***************** 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. player.c: 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 player regen. skill_util.c 1) Don't give out basic skills anymore. This interferes with the class code. spell_util.c 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. time.c 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/200 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. ------------------------------------------------------------------------------ Changes for 0.95.7: README: Add crossfire.csua.berkeley.edu server. TODO: Remove entry about setable behaviour for keyrings, since that has now been done. include/patchlevel.h, Makefile.in: Update for 0.95.7 MSW 9/20/2000 lib/maps: got rid of the stuff that was there. Useless stuff. the maps dist. is the thing to use. --PeterM common/living.c, server/skill_util.c: Patches by Garth Denley: Fixes divide by zero crash, sets up perm exp when a new player is loaded, seperates permanent exp code/calculations into another function. checked in by MSW, 8/24/2000 lib/crossfire.png: ground/sea*png - remove transperancies from png images since they should not be transparent. MSW 8/23/2000 doc/spoiler.html/(Makefile.in,empty.pbm, makeps.pl, spoiler.html): Modify to make gif images from png source instead of xpm images. A valid question to ask is why convert to gif at all and not just keep in PNG format. The answer right now is that png support in netscape at least still is not very good, and it displays gifs better. MSW 8/8/2000 Add/Remove some LOG calls: common/living.c: Remove log messages about gen_sp values on armor server/login.c, server/main.c: Add messages about player logins/logouts with IP address. Useful for tracking potentially troublesome players and where they are player from. MSW 8/7/2000 The following change basically does the following: When the server sends an item name to the client, this item name is now two pieces - the first piece of the name is its singular form, the second piece is the plural name. This now makes items in the inventory appear more proper in terms of pluralization and just normal English. I did notice that the server does not know how to properly make 'torch' plural - it turns it into torchs. A matching check in for the client has also been done. include/newserver.h: Update VERSION_SC to 1024 common/item.c: Change query_base_name to take a second option on whether we should generate a plural version of the name or not. socket/item.c: Modify functions to use second argument on the query_base_name function. Update item commands to send two part names (singular & plural). Modify esrv_send_look to use item1 protocol command instead of item command. server/c_object.c: Update item_matched_string to use second option to query_base_name. Modify function to check against both singular and plural versions of name. server/shop.c: Modify shop_listing command usage in query_basename to use second option. It will also generate the singular name, but that is only used on sorting, so I don't think it will generally cause any problems. include/libproto.h: rebuilt because query_base_name has an addition opt. Mark Wedel 8/6/2000 include/config.h, include/global.h, common/init.c, common/living.c, server/init.c, server/player.c, server/skill_util.c: Add permanent experience and balanced stat loss features (code by Garth Denley). Permanent experience make some experience in the skills permanent. Balance stat loss makes stat loss less likely/costly at low level and more costly at higher levels. These features are by default off, but can be turned on either in the config.h file or via command line options. Code checked in by MSW 8/1/2000 server/time.c: Update the change_object function such that if the object is in a players inventory, send a delete & send_item for the object that has changed (the delete + send_item is necessary due to the ways objects change, so we just can't sent a update_item). This fixes the 'torches go dim & then out but client inventory not updated' bug, and likely fixes some other problems - I am not sure how many other objects out there change. MSW 7/28/2000 random_maps/treasure.c: potential crash bug fixed. Only applied when a bad archetype was given as a wallstyle. I will also put in a redundant archetypes fix. --PeterM 7/26/00 lib/adm/map_info, lib/adm/map_check: Update to use new layout of installed files (share/crossfire), know about random exits (it doesn't do any checking to make sure the values are sane, which it probably should, but at least it won't complain about them), update to use /usr/bin/perl. MSW 7/25/2000 server/resurrection.c include/spellist.h: PeterM: fixed a few unintended things about resurrection: experience removal was wrong, spellpoints/levels changed. --PetrM lib/archetypes: Update to keep in sync with arch tree. Changes to about a dozen arch's to remove the 'a' in their name. MSW 6/27/2000 server/c_object.c: Fix command_drop which was doing incorrect check for invisible object - it was supposed to skip over them and only do visible objects, instead it was doing the reverse. Fixes the 'drop command. MSW 6/27/2000 server/input.c: Make the inventory command more robust for very long object names - specify a maximum number of characters we will take from the name. Without this, you could get buffer overruns that cause crashes. No normally generated items would ever likely have names long enough to exploit this bug however. MSW 6/27/2000 INSTALL, README: Update mailing address to real-time address. MSW 6/27/2000 server/login.c: Load and save usekeys value in player save file. MSW 6/27/2000 Patch by Jeffry Hantin which fixes glow objects in map. insert_ob_in_map_simple now will call the appropriate light updating code. Applied by MSW 6/26/2000 server/player.c: check_pick(): Rewrite of this function to consistently skip items that can't be picked up, and to only use a single loop over all items on the map square. - Jan Echternach 6/23/2000 ------------------------------------------------------------------------------ Changes for 0.95.6: server/monster.c: Patch by Neil Muller so that corrupt/bad @match entries will not cause the server to crash. Applied by MSW 6/21/2000 lib/archetypes: rebuilt for 0.95.6 lib/collect.pl: Modify to search the archetypes directories in alphabetical order - before I believe they were collected in basically inode order. This should make it easier to multiple people to run the collect script not have basically an entirely new archetyeps file. MSW 6/21/2000 server/commands.c; server/c_object.c: dump_object_from_tag(): Removed broken command. Fixes server crashes very easily triggered by players. - Jan Echternach 6/21/2000 server/attack.c: deathstrike_player(): Check for def_lev == 0 very early (and print error message if we find such an invalid level). Should fix server crash in case archetypes or maps get broken again in that an alive object has level < 1. - Jan Echternach 6/21/2000 Makefile.in: Update version to 0.95.6 include/patchlevel.h: Update to .6 for 0.95.6 release common/porting.c, include/config.h, include/loader.h, include/skills.h, include/spells.h, include/treasure.h, include/version.h, random_maps/style.c: Update my mail address and copyright date. Mostly committed to sync up my data with the CVS repository - MSW 6/20/2000 random_maps/treasure.c server/apply.c: made containers able to have more than one treasure in them, made a fix to treasure.c, which would change the options given to it in an unintended way. --PeterM 6/20/2000 common/living.c: fix_player(): Bugfix: Don't reset FLAG_FLYING, FLAG_REFL_SPELL, FLAG_REFL_MISSILE and FLAG_SEE_IN_DARK if the archetype has these flags. - Jan Echternach 6/19/2000 random_maps/* Numerous changes improving random maps, including two crash-fixes, a new type of 'special', ability to copy inventory of monsters when putting them into maps... --PeterM 6/19/2000 New naming scheme for random maps: they won't grow in size indefinitely anymore. --PeterM 6/17/2000 server/input.c: command_cast_spell(): Bugfix: Call check_skill_to_fire() even for wizards because this function has the important side effect of setting the current skill and experience objects. - Jan Echternach 6/19/2000 server/apply.c: apply_treasure(): Bugfix: We need to trigger runes as they are found in the treasure chest, because move_rune() will no longer trigger them for us. - Jan Echternach 6/18/2000 Updated the INSTALL directions. MSW 6/16/2000 Modified the editor to make certain objects (teleporters, creators, markers) more easily editable. --PeterM 6/16/2000 Modifed how firewalls worked. They can now be triggered by handles as well as turned. Ones which are turned by handles cannot be triggered by handles. PeterM 6/15/2000 fixes to random_maps: exit.c: won't crash if named final_map doesn't exist room_gen_onion.c: reordered the options more sanely special.c: fixed a crash-bug: nuke_map would nuke parts of monsters, but not the whole monster. --PeterM server/skill_util.c: Fix type in change_skill - was doing an == operation when it should just have been an =. MSW 6/13/2000 common/anim.c: animation_object() - return if object does not have a valid animation after logging error. Before, we logged the error and would promptly crash. MSW 6/13/2000 server/apply.c: apply_treasure(): Bugfix: Set FLAG_NO_APPLY before moving object to the top. - Jan Echternach 6/13/2000 server/time.c: move_marker(): Bugfix: Call update_ob_speed() after changing force->speed. - Jan Echternach 6/13/2000 server/spell_util.c: move_swarm_spell(): Improved distribution of fired objects. Fixed starting position of fired objects to be able to hit targets immediately in front the caster. - Patch by Jeffrey Hantin, applied by Jan Echternach 6/13/2000 server/disease.c, sproto.h, rune.c Fixes from jhantin@derringer.net for diseases: Reversed strstr calls, force argument added to infect_object, diseases in immune carrier last forever, needles use infect object, cast_cause_disease won't fail. --PeterM 6/9/2000 common/loader.l: Fix handling of objects with no animation. Fixes server crash if object's archetype has an animation, but object doesn't. - Jan Echternach 6/9/2000 common/loader.l: get_ob_diff(): Bugfix: Issue a "is_animated 0" line if the object has an animation, but doesn't have FLAG_ANIMATE. - Jan Echternach 6/9/2000 server/apply.c: manual_apply() and monster_apply_special(): Don't check for FLAG_UNPAID if object is applied. This should make the code more robust if an unpaid item get's applied accidently. - Jan Echternach 6/9/2000 server/apply.c: apply_special(): New optional flags AP_NO_MERGE and AP_IGNORE_CURSE. - Jan Echternach 6/9/2000 server/monster.c: find_mon_throw_ob(); server/skills.c: find_throw_ob(): Bugfix: Use AP_NO_MERGE flag to prevent unapplied object be merged with other objects. - Jan Echternach 6/9/2000 server/spell_effect.c: animate_weapon: Bugfixes: Correctly unapply weapon. Don't set FLAG_APPLIED directly on weapon in golem, but use apply_special(). Don't call esrv_send_item() when caster is not a player (fixes server crash if monster casts this spell). - Jan Echternach 6/9/2000 random_map/ Fixes in the map code for various things, including: 1) crash bug on multi-square monsters. 2) no treasures in final_map, 3) new feature of doing walls only, .... --PeterM 6/9/2000: common/button.c: do_mood_floor(): Bugfixes: Only players can have pets. Call add_friendly_object() for friendly monsters. - Jan Echternach 6/8/2000 server/spell_effect.c and server/spell_util.c: Several functions: Only add a pet if there really is a pet's owner, and it's a player. - Jan Echternach 6/8/2000 server/spell_effect.c: cast_charm() and cast_charm_undead(): Bugfixes: Only players can cast these spells. This fixes server crash if a monster casted a charm spell, and the charmed pet was killed. Call add_friendly_object for friendly monsters. - Jan Echternach 6/8/2000 common/friend.c: remove_friendly_object(): Use llevError for error messages. - Jan Echternach 6/8/2000 common/living.c: fix_player(); server/gods.c: tailor_god_spell(); server/spell_effect.c: summon_avatar() and animate_weapon(): Bugfix: Set a string to NULL after calling free_string(). This fixes a nasty bug that caused the string's reference count drop below 0, which resulted in corruption of malloc()'s internal data structures (and possibly server crashes). - Jan Echternach 6/8/2000 server/time.c: move_creator(): Bugfix: Call free_string() to free old values of op->name and op->title before overwriting them with new values. - Jan Echternach 6/8/2000 common/object.c: insert_ob_in_map_simple() and insert_ob_in_map(): Check that we don't insert freed objects. - Jan Echternach 6/8/2000 server/attack.c: hit_player_attacktype() and hit_player(): Bugfix: Check that find_god() really found a god, and that 'god->slaying' is not NULL. Fixes crash if a monster casted turn undead and actually hit something. - Jan Echternach 6/8/2000 server/attack.c: hit_player(): Check that a pet's owner is a player. Prevents server crashes if a monster has a pet monster due to a bug somewhere. Use llevError for error message. - Jan Echternach 6/8/2000 server/time.c: move_arrow(): Use llevDebug level for "Arrow had no map" message. - Jan Echternach 6/8/2000 server/c_object.c, server/spell_effect.c, server/spell_util.c: Bugfixes: Added some missing checks for destroyed objects. Use was_destroyed() or return value of insert_ob_in_map() to check for destroyed objects, not FLAG_FREED or FLAG_REMOVED. Don't use op->count of destroyed objects. - Jan Echternach 6/8/2000 server/shop.c: get_payment2(): Type of tag is 'tag_t', not 'long'. - Jan Echternach 6/8/2000 server/spell_effect.c: animate_bomb(): Fix environment checks. - Jan Echternach 6/8/2000 server/spell_util.c: fire_bolt(): Bugfix: Set level of bolt. - Jan Echternach 6/8/2000 server/spell_util.c: explosion(): Bugfix: Set FLAG_NO_APPLY before moving the exploding object to the top. - Jan Echternach 6/8/2000 server/spell_util.c: put_a_monster(): First create the monster completely, then just insert its head. - Jan Echternach 6/8/2000 server/time.c: generate_monster(): Bugfix: Don't free generators that are used up in this function. process_object() already does this. This fixes steambolt (which is a generator but must not used up here - generate_monster() wasn't looking at FLAG_IS_USED_UP) and all generators which should really be used up (because process_object() didn't expect generate_monster() to destroy the object). - Jan Echternach 6/8/2000 server/rune.c: trap_disarm(): Bugfix: Use SK_level() to determine disarmer's level. Fixes server crash if multisquare monster casts "disarm". - Jan Echternach 6/8/2000 server/attack.c: hit_map(): Use was_destroyed() to properly check for destroyed next object. Use llevError for error messages. Skip all objects that are (no longer) at the specified map position. - Jan Echternach 6/8/2000 server/map.h server/main.c Increased buffer sizes for map paths. Needed for random map code. --PeterM 6/6/2000 6/4/2000: Fix done to disease.c which causes diseases to put experience into the appropriate category. --PeterM 6/4/2000: Added race fields to a lot of monsters. Modified disease arcs so that they'll be specific to races. Changed include/spellist.h to re-enable the disease spells. --PeterM 6/4/2000 (disease.c) Added a self-limiting parameter to diseases so that their power can be tuned to be reasonable. --PeterM lib/crossfire.png: Some floors modified to no longer have transperencies. include/newserver.h: Add Send_Face_Png made, also update versions of the protocol include/newclient.h: Add CF_FACE_PNG constant. socket/request.c: Add support for receiving PNG facemode request, ad final logic to send png images to the client. Changes by Mark Wedel, 6/2/2000 lib/checkarch.pl: Check for archetypes with type FIRECHEST but no level. - Jan Echternach 5/29/2000 server/apply.c: move_apply(): Added handling of THROWN_OBJ, CANCELLATION and BALL_LIGHTNING. server/spell_effect.c: cancellation(): Traverse inventory of objects with type THROWN_OBJ. - Jan Echternach 5/29/2000 server/player.c: fire_bow() and server_skills.c: do_throw(): Bugfix: Don't use op->count of freed objects. Use was_destroyed() to check for freed objects instead of QUERY_FLAG (FLAG_FREED). - Jan Echternach 5/29/2000 server/spell_util.c: fire_a_ball(): Bugfixes: Use op->other_arch as the archetype to fire, not FBULLET. (-> Firechests now cast fire balls again, not snowballs.) Set level of fired archetype. Check if object was destroyed after insert_ob_in_map(). - Jan Echternach 5/29/2000 server/time.c: move_firewall() and move_firechest(): Do nothing if object has no map. Fixes server crashes if a dm creates such a thing in the inventory. - Jan Echternach 5/29/2000 lib/collect.pl: Modify so that it does not complain about png files in the arch directory MSW 5/28/2000 common/item.c: Fix query_short_name - wasn't generating all item names properly because of changes made a few days ago - some areas manipulate the string being worked on and was not updating the length properly. MSW 5/26/2000 doc/mapguide: Fix some typos. MSW 5/26/2000 include/define.h: Add MIN_ACTIVE_SPEED value to determine what threshold something will be put on the active list or not instead of using varying values throughout the source code. common/item.c, common/object.c, server/monster.c, server/pets.c, server/spell_effect.c: Updated to use the MIN_ACTIVE_SPEED instead of hardcoded values. MSW 5/26/2000 include/define.h,include/global.h, common/image.c: Remove following old face information: INV_*_FACES, BLOCKED_FACE, STIPPLE[12]_FACE. This is just a general cleanup - the server has not used these since the X11 code was pulled from the server. MSW 5/26/2000 common/living.c: Add entries for the attack type AT_INTERNAL in description. include/material.h: Update to include saves against INTERNAL attacktype. include/living.h: Remove defunct objects_saves external referance. The additions of internal to the tables should not really be needed, as internal attacktypes should not be used publically, but these also act as placeholders for future attacktypes. MSW 5/26/2000 * server/attack.c: hit_map(), hit_player(); server/spell_effect.c: move_cone(); server/rune.c: spring_trap(); server/spell_util.c: move_missile(): Bugfix: Added missing was_destroyed() calls. * server/rune.c: spring_trap(): Bugfix: Call trap_show() before the rune has a chance to be destroyed. * server/attack.c: hit_map(), hit_player(): Check for freed objects right at the beginning of the function. Removed check that hitter has a name from hit_player(). * server/spell_util.c: move_cone(): Bugfix: Remove cone objects in inventories from active list, this fixes the cone without map problem when a flower was hit with ice and put into an icecube. * server/spell_util.c: move_missile(): Bugfix: Don't call hit_map() while missile is removed from the map. * server/apply.c: manual_apply(): Handle MMISSILE. - Jan Echternach 5/26/2000 * server/spell_effect.c: animate_weapon() and server/spell_util.c: summon_monster(): Bugfix: Set FLAG_FRIENDLY for friendly objects. - Jan Echternach 5/26/2000 * server/attack.c: hit_player(): Bugfix: remove_friendly_object() was called always after an object with type GOLEM had been killed, but friendly objects are objects with FLAG_FRIENDLY, not objects with type GOLEM. This fixes some "Remove_friendly_object(): Can't find object" errors. - Jan Echternach 5/26/2000 ----------------------------------- --- BEGIN apply() cleanup patch --- Jan Echternach 26/5/2000 ----------------------------------- * player specific code moved from apply() to player_apply() and player_apply_below(). * apply(): null pointer check removed * (bugfix?) print message if scroll is unusable because of invalid spell number * bugfix: if the altar casted a spell, the message was sent to the (destroyed!) sacrifice, not the player * split apply() -> move_apply() / manual_apply() * move_apply(), check_walk_on(), insert_ob_in_map() and other functions: New parameter 'originator' that is the object that caused another object to be inserted into the map. This removes the need to look through all map objects above an altar to find the player who dropped the sacrifice. * always check FLAG_UNPAID in manual_apply() * don't check FLAG_UNPAID in apply_special(), new function monster_apply_special() which checks FLAG_UNPAID and calls apply_special() * many new functions like apply_altar() and apply_spellbook() to make the switch statements in move_apply() and manual_apply() shorter * changes to actual apply() code: ALTAR: spell casting altars should work now if not operated by a player common/button.c, operate_altar(): altar's message is sent to altar's map, not player's map bugfix: if sacrifice was accepted, apply() didn't tell the caller that it has been destroyed ARROW, CONE, FBULLET, BULLET: now returns 'victim destroyed' if victim was killed by the attack TRAPDOOR: play sound only if something fell through the trapdoor print trapdoor message _before_ falling into trapdoor TRIGGER_ALTAR (in check_trigger()): don't check for sacrifices if called from animate_trigger() don't call check_trigger() from fix_auto_apply() anymore (this change breaks maps with altars that have their sacrifice already stored on them) DEEP_SWAMP: deep_swamp() -> walk_on_deep_swamp() / move_deep_swamp() when deep_swamp() (now move_deep_swamp()) is called from process_object(), assume that state (swamp->stats.food) is already 1 EXIT: removed support for multisquare players don't print 'is closed' message when moving on an exit, only print this message if exit is applied manually SIGN: only increment last_eat if it hadn't reached the limit yet SPELLBOOK: removed partial support for applying by monsters BOW, WAND, ROD, HORN: moved code to apply_special() CLOCK: bugfix: Monsters must not apply a clock, they would crash the server. POWER_CRYSTAL: Bugfix? Don't call esrv_update_item() if not applied by a player. LIGHTER: Bugfix? Just return 0 if not applied by a player. * changes to apply_special(): BOW: remove double check_skill_to_apply() ROD, HORN: change message from "you apply ..." to "you ready ..." BOW: FLAG_READY_BOW is now set by apply_special(), but that seems redundant because monster_check_apply() also sets this flag. Remove setting of this flag from apply_special() because it could have a more complex meaning in monster.c or remove setting of this flag from monster_check_apply() because such stuff should be handled in apply.c? FLAG_READY_BOW is also unset in apply_special() if a bow is unapplied. CONE: don't multiply damage by 20 SIGN: you can hear magic mouths even if you are blind however, now you can also read signs with FLAG_WALK_ON/FLAG_FLY_ON if you are blind (different object types or a new flag would be required) RUNE: detonation moved from move_rune() to move_apply() -> runes will now always detonate if somebody steps on them allow runes with FLAG_FLY_ON completely removed GRAVE and MONEY_CHANGER common/object.c: was_destroyed(): new function include/object.h: new typedef tag_t move_apply() returns void, check_walk_on() uses was_destroyed() lib/checkarch.pl: check for archetypes with walk_on, walk_off, fly_on or fly_off and without a type check for archetypes with type FIREWALL (type 62) and without a level * server/apply.c: Bugfix: Don't skip calls to change_skill() if wizard - calc_skill_exp() requires change_skill() to set the current experience object. * server/monster.c: find_mon_throw_ob(): Bugfix: Unapply applied object even if heaviest object was choosen. Bugfix: Use monster_apply_special() to unapply, clearing FLAG_APPLIED isn't enough. -> Should fix the "HAS_READY_BOW without bow" errors. * server/skills.c: find_throw_ob(): Bugfix: Use player_apply(), clearing FLAG_APPLIED isn't enough. Replace redundant check for FLAG_INV_LOCKED with error message at end of function if the first check failed somehow and we have choosen an object with FLAG_INV_LOCKED. make_throw_ob(): error message if object is applied * lib/checkarch.pl: check that potions (type 5, POTION) have a level * server/apply.c: apply_special(): Handle all cases of applying and unapplying skill objects. * server/apply.c: manual_apply(SKILL): Just call apply_special(). * server/skill_util.c: change_skill(): Rewrite to simply use apply_special() for changing skills. * server/apply.c: apply_special(): Bugfix: Fixed return values. * server/skill_util.c: link_player_skills(): Bugfix: Don't set exp_obj for (visible) skill tools. * server/skill_util.c: link_player_skills(): Bugfix? Reset op->chosen_skill and FLAG_READY_SKILL because we have unapplied all skills. * server/input.c: legal_range(): Bugfix: range_skill is valid only if op->chosen_skill != NULL, not when there is some (unapplied) skill somewhere in the inventory. * server/login.c: check_login(): Bugfix: call legal_range() after init_player_skills() - we can't handle range_skill correctly if skills haven't been initialized. * server/login.c: check_login(): Bugfix: Check return value of legal_range(), and reset op->contr->shoottype to range_none if range was invalid. * server/login.c: check_login(): Bugfix: Don't call fix_weight() - fixing the weight of _all_ players isn't necessary. Just initialize op->carrying directly with sum_weight() instead. This also removes the problem of updating the weight of an object that hasn't been sent to the client yet. * server/login.c: check_login(): Bugfix: We need to call fix_player() (init_player_skills() needs this, and it also makes the code more robust). * server/apply.c: apply_altar(): Bugfix: Print altar's message before casting the spell. * server/spell_util.c: move_cone(): Use copy_owner() instead of set_owner() and manually correcting the skill and experience object pointers. * server/spell_util.c: cast_cone(): Don't set FLAG_FLYING - the archetype needs to have this anyway for move_cone() to work properly. Instead, print error messages if FLAG_FLYING, FLAG_WALK_ON or FLAG_FLY_ON are missing. * server/apply.c: move_apply(): TRAPDOOR: Bugfix: Multiply by op->nrof when calculating the weight. * randommaps/standalone.c, server/apply.c: fix_auto_apply(): Bugfix: Don't call check_trigger() for objects of type TRIGGER. For other trigger types, call check_trigger() only if there is an object above the trigger. This can be used to implement doors that are only open shortly after the map has been loaded. * common/button.c: check_trigger(): Many changes. The triggers should now behave as described in crossfire.doc. -> This breaks maps that rely on old buggy behaviour. * server/monster.c: monster_apply_below(): will_apply & 1 now also applies TRIGGER objects, not only HANDLE objects. Allows an interesting solution for /asyvan/gate9 if there is no second player who can open the middle grate. * common/button.c: check_trigger(TRIGGER_PEDESTAL) and update_button(PEDESTAL): Bugfix: Handle objects with heads correctly. * server/c_object.c: drop_object() and socket/item.c: look_at(): Bugfix: If a player is moved on top with remove_ob()/insert_ob_in_map(), FLAG_NO_APPLY must be set temporarily. * common/object.c: remove_ob(): Bugfix: Don't call move_apply_func() if FLAG_NO_APPLY is set. * server/apply.c: manual_apply(): Don't call apply_special() for objects that are not in the inventory. Return 2 in this case. * server/apply.c: player_apply_below(): Skip objects for which manual_apply() returned 2. * server/apply.c: apply_spellbook(): Bugfix: Don't give experience for items with FLAG_STARTEQUIP. --------------------------------- --- END apply() cleanup patch --- Jan Echternach 26/5/2000 --------------------------------- server/input.c: modify examine_monster to use the maxhp field instead of the arch hp field to determine healthiness of the monster. Also, give this information for all creatures, not just monsters or players. MSW 5/23/200 socket/item.c: Add MAXITEMLEN define at top of file and use that to determine at what point item commands should be broken up. Prior hard coded value was not always large enough. MSW 5/23/2000 include/define.h: add safe_strcat inline/static function. Add DESCRIBE_ABILITY_SAFE and DESCRIBE_PATH_SAFE which use the safe_strcat to prevent buffer overuns. common/item.c: Have query_name use HUGE_BUF for its buffer - query_short_name uses that buffer size, and we call the same thing. have quer_name and query_short_name use the safe_strcat function. Increase buffer size in ring_desc to be a VERY_BIG_BUF and also use safe_strcat along with the DESCRIBE_*_SAFE macros. server/input.c: Modify examine.c to not get buffer overruns for very long/ complicated items. Modify long_desc to also handle long names/descriptions without buffer overruns. socket/item.c: Modify the functions that prepend the length to the name of the object to handle very long (>255) object names properly - now we just truncate it and only send the first 255 bytes. add function add_stringlen_to_sockbuf to make this task easier. With the above changes, very long named items/items with very long descriptions works properly in both the server (no crashes) and the client (no crashes/protocol errors) MSW 5/22/2000 common/item.c: Modify query_short_name to avoid buffer overflow on long ring descriptions. Also, increased size of buffer in this function so that longer ring descriptions will not get truncated. MSW 5/22/2000 server/c_chat.c: Add standard banner to top of file. Fix say command so that it does not crash the server if something beyond 256 characters is spoken - extra data is just truncated. MSW 5/22/2000 common/object.c: Splitted set_owner() into set_owner_simple() and set_owner(). copy_owner(): New function. server/spell_util.c: explode_object(): Use copy_owner() instead of setting skill and experience objects manually. Bugfix: Don't use op->owner directly (fixed by using the caster in call to SP_level_dam_adjust(), not the owner, which was wrong anyway). server/spell_util.c: fire_arch_from_position(): Use copy_owner() instead of set_owner() if 'op' isn't the real owner but only a spell object owned by somebody else. server/spell_util.c: move_swarm_spell(): Use the swarm spell object as the owner in call to fire_arch_from_position(), which now handles this case correctly. server/spell_util.c: fire_swarm(): Call tailor_god_spell(). server/gods.c: determine_god(): op->type==SWARM_SPELL is a spell. server/gods.c: tailor_god_spell(): op->type==SWARM_SPELL is a spell. Always abort function if we couldn't find a god. Always add god's attacktype if the spellop's attacktype has AT_GODPOWER. - Jan Echternach 22/5/2000 common/init.c, common/loger.c, include/logger.h, server/init.c: New log level llevInfo which is the new default log level. Many other files: Use llevInfo instead of llevError where appropriate. Use 'settings.debug >= llevDebug' instead of 'settings.debug'. - Jan Echternach 21/5/2000 server/main.c: Use a marker object to track current position in the list of active objects. Using a pointer didn't work because all objects on that list can be removed from it by process_object(). One of the things this fixes is bogus "Free object on list" errors. - Jan Echternach 21/5/2000 crossedite/Makefile.in: Modify to use $(MAKE) instead of make when descending into subdirectories - fixes compilation on FreeBSD - MSW 5/17/2000 socket/init.c: Fix incorrect check on return value from fread when loading xpm images. MSW 5/17/2000 Fix server/spell_effect.c - was assigning altar->other_arch to an object and not archetype MSW 5/16/2000 server/spell_effect.c: magic_wall(): Duration of darkness spell now implemented with op->stats.food. This avoids problems with very low speed values that were interpreted as infinite duration. lib/spell_params: Changed duration parameters of darkness spell to give a reasonable duration with the new formula. - Jan Echternach 16/5/2000 common/living.c: drain_stat(): There are 7 stats now, not 6. - Jan Echternach 15/5/2000 server/rune.c: rune_attack(): Check that victim still exists after hit_player() was missing. This fixes server crashes if monster applied a chest, found a diseased needle and was killed by it. - Jan Echternach 15/5/2000 server/spell_effect.c: cast_charm(): out_of_map() check was missing. This fixes server crashes when a player casted this spell near the edge of a map. - Jan Echternach 15/5/2000 Make image files and code more generic. This was largely done to make adding support for png files easier, but in reality, it means adding support for any new file format is now trivially easy. Format of the image file is: IMAGE \n followed by the image data. This allows support for binary image formats (png), but also means that the server doesn't need to know anything about the image format - rather it is all just data as far as the server is concerned. I think this actuallyy loads the xpm data a little faster - it would make sense that it should, since it just reads all the data in with one fread instead of parsing it line by line waiting for the end image delimeter. Note: While png images are loaded, they are currently not supported in the client nor will the server send them - that is the next step in the work, but that will require just a few minor changes to the server - most of those change will be in the client. crossedit/xutil.c: Merge bitmap & pixmap load routine into one called ReadImages, function modified to use above format. crossedit/App.c: Call ReadImages to load images. include/newserver.h: Change FaceInfo structure to have arrays of data and datalength instead of explicity entries for pixmap vs bitmap data. lib/adm/make_xpm_file.pl, lib/crossfire.cfb, lib/xbmtobdf.c: Removed - either note needed or replaced by new naming scheme. lib/adm/collect_images.pl: Replacement/improvement of make_xpm_file.pl above - this handles all image formats (xbm, xpm, png). This is also more intelligent in that it will not try to rebuild the image files if there is not a valid arch directory. lib/crossfire.png, lib/crossfire.xbm (new files): .png file is for png images. xbm is to keep with the new standardized naming convention used and is for the bitmaps. lib/crossfire.xpm: New format used in file. lib/Makefile.in: Modified to collect via new script as well as new directives to collect (png files). socket/init.c: Modified to load with the new format and data structures. socket/request.c: Modified to send data with the new data structures provided. End of image changes, MSW 5/13/2000 configure.in, configure: Add check for perl so that we can call scripts properly - MSW 5/13/2000 common/re-cmp.c: Add some tolower calls in the comparisons so most regular expressions should not be case insenstive (makes matches & says work better). Note that I did not change the behaviour on range matches (Z-f for example), as I thought there may be side effects in that case. MSW 5/8/2000 socket/request.c: Add length checking to NewPlayerCmd so that if the client sends us a really long command, we just truncate the end of it and not overwrite our internal buffers causing crashes. MSW 5/8/2000 server/player.c: add out_of_map check to stand_near_hostile function. This fixes a server crash if the player uses a hiding skill near the edge of a map. MSW 5/8/2000 common/arch.c, common/loader.l (loader.c): Modify the load routines to strip off trailing whitespace in object names and other_arch fields - I believe this is why altars to Sorig did not generally work, and while generally that white space should not exist, doing a little extra checking for it is not a bad idea - MSW 4/26/2000 Add HOLY_ALTAR type, and use that for praying over for gods and the like. doc/crossfire.doc: Add description of HOLY_ALTAR type and meaning of fields. common/map.c: Disable consecration code for altars. include/define.h: Add type for HOLY_ALTAR include/sproto.h: Update for change of some functions below. server/c_wiz.c: Modify setgod command to call become_follower with proper second arg. server/gods.c: Change become_follower to take object pointer to god instead of name, since the holy_altar has the pointer in its other_arch. Modify pray_at_altar to use the new fields, as well as fixed what seemed to be numerous bugs in that function. sever/skills.c: Change check from ALTAR to HOLY_ALTAR, also change check to see if HOLY_ALTAR is consecrated by looking at the other_arch field. server/spell_effect.c: Update consecrate so that caster must be higher effective level than the altar, also update for differing fields. maps/thomas/sisters/shrine0, map/thomas/sisters/tower0: Remove title from altars on these maps - these were the only two maps using old style altars consecrated to a god. Since it appears the real purpose of the altars on these maps was to trigger something else, they were kept as old style altars. arch/gods/altars (relocated from arch/indoors, as I think the new location makes more logical sense): Update for new fields/format. This also affects lib/archetypes, lib/bmaps.paths, lib/crossfire.xpm, lib/crossfire.cfb lib/adm/archsearch.pl: Modified to hunt out old archetypes - some of the changes could be useful in general cases. MSW 4/26/2000 server/spell_util.c: Fix move_golem so that multi square avatars (golems) don't hit themselves. Remove will_hit_self function (only used in move_golem), since it did not work. Change structure & indenting of move_golem function so it isn't quite so nested - functionality remains the same. When we do find something to kill in move_golem, call attack_ob against it instead of hit_map - hit_map is not save for multi object hitters. MSW 4/24/2000 Key usage change: Add new command 'usekeys' that specify how keys are searched for. The three options are inventory, keyrings, and containers. These options apply to both standard keys and special keys. If the player has a key for the door but it is in a container that will not be used, print a friendly message of the key name and container name. Files affected: help/usekeys: Added describing options lib/Makefile.in: Addition of help/usekeys above. include/player.h: Add new enumeration and entry into player structure include/sproto.h: New function prototype server/apply.c: change of Find_Key to new function with slightly different options server/c_misc.c: add function to support 'usekeys command. server/commands.c: addition of usekeys command server/player.c: rewrite & rename of find_key command, as well as changes to move_player_attack Mark Wedel 4/21/2000 server/spell_effect.c: create_bomb(): New spell_type parameter, merely for consistency with itself and with other spell casting functions. - Jan Echternach 4/19/2000 server/spell_effect.c: create_bomb(): Set level of created bomb. Fixes the problem that the splints were casted without a level. - Jan Echternach 4/19/2000 lib/checkarch.pl: New perl script to check the archetypes file for obvious bugs (like object that is alive but doesn't have a level). - Jan Echternach 4/17/2000 include/spellist.h: "meteor swarm" is now a missile spell (PATH_MISSILE) just like "comet". - Jan Echternach 4/17/2000 server/spell_util.c: path_level_mod(): Rewrote to fix countless bugs. New interface with explicit base level parameter. server/spell_effect.c: finger_of_death(): Call path_level_mod() with correct base level. server/spell_util.c: casting_level(): New function that combines SK_level() with path_level_mod(). - Jan Echternach 4/17/2000 server/spell_util.c: Several cosmetic changes (spell type parameter name is spell_type, arch_to_object(get_archtetype(...)) is equivalent to get_archetype(...), use casting_level() if applicable). - Jan Echternach 4/17/2000 server/spell_util.c: fire_swarm(): New 'caster' parameter because owner and caster can be different. Level of the swarm object is casting level of the caster, not overall level of the owner. server/spell_util.c: fire_arch_from_position(): Set level of fired arch to casting level of caster. server/spell_util.c: cast_cone(), cast_smite_spell(): Set level of spell object to casting_level() and not SK_level() to honour path_attuned and path_repelled of the caster. server/spell_util.c: move_cone(): Just copy the level for new cone objects. Missing level meant AT_DEATH didn't work, missing call to path_level_mod()/casting_level() meant path_attuned/path_repelled was ignored. - Jan Echternach 4/17/2000 server/player.c: fire_bow(): Set level of fired arrow. Arrows with AT_DEATH are now working. - Jan Echternach 4/17/2000 server/player.c: fire(): Call check_skill_to_fire() even for wizards because this function has the important side effect of setting the current skill and experience objects. - Jan Echternach 4/17/2000 server/skills.c: do_throw(), server/time.c: stop_arrow(), server/player.c: fire_bow(): Flying arrows and thrown objects have FLAG_NO_PICK set because picking these objects is currently broken (and maybe it shouldn't be possible anyway - picking up a _flying_ arrow?). - Jan Echternach 4/17/2000 server/c_wiz.c: set_god(): Didn't work at all because it was trying to set the current player as his own god. - Jan Echternach 4/17/2000 server/map.c: check_path(): Return value was wrong if the name did not refer to a regular file. A symptom of this bug was that the server crashed if a wizard tried to enter a directory with the 'goto' command. - Jan Echternach 4/17/2000 server/map.c: open_and_uncompress(): Check that the file we have opened is (still) a regular file, fail if it's not. This is the right place for such checks if we want to avoid race conditions (e.g. file replaced by directory while trying to open it). - Jan Echternach 4/17/2000 c_party.c commands.c daemon.c disease.c gods.c spell_effect.c spell_util.c: Cosmetic fixes - updates to rcsid string to include right file name as well as updates to mail address and/or additions to top banner. Mark Wedel 4/13/2000 Various files: Updated my mailing address to be accurate - Mark Wedel 4/13/2000 doc/playbook/handbook.idx: Automatically generated file removed. This is not something normally included in packed up distributions, so no reason to have it in CVS - Mark Wedel 4/13/2000 doc/include_html.pl, doc/playbook/make_index.pl, doc/spoiler-html/makeps.pl, lib/adm/make_xpm_file.pl: Change to use /usr/bin/perl instead of /usr/local/bin/perl - real change is to find perl in configure.in and call the scripts with that. Mark Wedel 4/13/2000 server/input.c: Don't try to calculate spellpoint costs for denied spells, because these are undefined and are now causing lots of BUG messages. Also improved formatting: spellpoint costs can be > 99, and don't fill everything with zeros, use spaces instead. Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/12/2000 server/skill_util.c: Fixed some log messages that were lacking a newline at the end. SK_level(): Rewrite of this function to simplify its structure. Print error message if we find an invalid level. Add top copyright/contact banner (msw) Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/12/2000 server/apply.c, server/monster.c: Fix in apply.c for encounter maps so that proper message is generated, and differentiate behaviour if it is a floor vs not a floor. Also, change to both files in that apply_below stops at the floor object. Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/12/2000 server/apply.c, doc/crossfire.doc: Fix to prevent server crashes when monster applies poison object. doc file is updated to include accurate information on values in poison object. Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/11/2000 CREDITS, server/main.c: Add Peter Gardner to list of credits. Mark Wedel 4/4/2000 server/apply.c, improve_armour(): Maximum armour value reduced to 90. Items can now always be improved up to this value. For armour x you need level x, not level x + 1 as before. esrv_send_item() and fix_player() also called if only magic value was improved. Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/4/2000 server/attack.c, attack_message(): More messages. "grind to dust" is more damage than "shred to pieces". Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/4/2000 server/spell_effect.c, magic_wall(): Fix calculation of duration of darkness spell. Before, you could get huge negative speed values with high experience levels, which meant very short duration. Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/4/2000 server/spell_util.c: 1) New argument of fire_swarm() to specify whether it's a magic attack. All swarm spells except meteor swarm are now magic (just as the underlying basic spell). 2) New function fire_arch_from_position() which doesn't use the owner's position as the starting position of the fired arch. 3) move_swarm_spell(): Correctly set owner and magic in call to fire_arch_from_position(). 4) Above changes fixes "cause many wounds" spell Patch by Jan Echternach, applied & checked in by Mark Wedel, 4/4/2000 common/map.c: Change calls in file to use insert_ob_in_map simple. This fixes bugs with buttons not being applied correctly when the map is loaded - the cause is that push_button is getting called for the button before all the objects the button is linked to have been loaded. Then when the map finishes loading, the call to update_button is called and they are not in sync. This change should make loading slightly faster, mostly because it does not call check_walk_on during the loading, so that buttons don't get pushed/changed around. Mark Wedel 3/28/2000 server/player.c: If player is using pickup mode 6, only have them pick up the item if they know it is magical. Prior to change, items would be picked up if they are magical, but not if the player knew that, so the code was giving extra knowledge to players. Bug reported by Kurt Fitzner, checked in by Mark Wedel, 3/26/2000 common/map.c: Code fix by Kurt Fitzner so that unique maps will get compressed if so needed. Fixes problem of unique maps not being able to get reloaded as they are saved with the compress suffix but not in compressed form. Code checked in by Mark Wedel, 3/26/2000 server/skills.c, server/spell_effect.c: Improve behaviour when identifying items - the identify routine already updates the client if it is in the players inventory, so only send update to client if the item is on the map. Also, do full item update, as many fields may change, and that is what the identify function does. Standard top of file banner also added to skills.c file. Fixes problem of objects in inventory being displayed with two numbers in from (ie, two two bows +1). Bug and initial fix of item updates by Kurt Fitzner, implemented in a bit different way by Mark Wedel. 3/26/2000 Makefile.in, doc/Makefile.in: Modified so that making the docarchive now works. The make must be done from the top level for it to work, since some values are passed, but the doc/Makefile.in was missing some declarations and had some other fixes that needed to be done. msw 3/22/2000 ------------------------------------------------------------------------------ Changes for 0.95.5: Makefile.in: comment out the EXTRA_FLAGS (which contains the -Wall entry) - the presumption that everyone is going to use gcc to compile crossfire is a poor one, and -Wall is only supported on gcc. I would rather have it compile on the maximum number of systems without it needing changes than to require the end user to make the customizations. A better long term solution is to have configure.in check for gcc or if -Wall is supported it and have it add it in. msw 3/21/2000 server/c_object.c: Fix pick_up_object function to deal with non players picking up objects - prior to fix, program would crash when monsters pick up objects. Also, add standard banner at top of file about copyright, contact, version information. msw 3/21/2000 CREDITS, README: Updated to contain my new mailing address. In reality, almost all the files have an out of date address for me, but these are probably the ones people will look at most. README also updated with new ftp location. msw 3/20/2000 include/Makefile.in: Update files to include material.h - need when packing up new releases - msw 3/20/2000 doc/hanbook.ps, doc/spoiler.ps, doc/spoiler-html/spoiler.html: Rebuilt with latest version of crossfire - not sure if there are any content changes, as the tools to build the file have been updated on my system, causing many changes to the prologue and outputted data. - msw 3/20/2000 Change doc/spoiler-html/Makefile.in and doc/playbook-html/Makefile.in to use $(datadir) instead of $(C_LIBDIR). Other add AWK and INCDIR lines so that it properly builds with autoconf setup. msw 3/19/2000 Change spoiler.tex, handbook.tex to build properly with later versions of tetex - added language specifier when using the babel package. msw 3/19/2000 Add missing doc/playbook/fig directory to the CVS reposistory - msw 3/18/2000 Change summon_cult_monster code so that it will no longer summon big monsters on top of walls or the player. Also, if there is not space for a big monster, try to find another pet monster that will fit in the space. File affected: server/spell_effect.c - msw Change gorokh.arc to use anim devil instead of anim Lucifer - fixes crash when using avatars of gorokh - msw Split off kill_player function from do some living, and check for player death upon player login. This splits up an otherwise very large function, but more importantly, the second point allows NOT_PERMADEATH to work as expected when the player is dead when logged out. Previous, the if the player was dead when they logged out, it would just kill off the character permanently (without grave marker or anything), even in NOT_PERMADEATH mode. Also, cleaned up player load code to remove code that supported very old style save files. Files changed: server/login.c server/player.c include/sproto.h - msw Change NO_STAT define in living.h,skillist.h,skill_util.c to NO_STAT_VAL to remove conflict on AIX systems. - msw Fix error in configure.in - was referancing BZIP2, when it should have used BZIP - msw 2/7/2000 server/skill_util.c: Fixed spelling of unwield configure.in: Update -z checks to not use eval, double quote the variable. This seems to be needed on solaris and probably other systems. Both changes commited by Mark Wedel, 2/7/2000 ---SMALL BUGFIX--- John Cater 5/11/1999 server/attack.c: - changed the logic in hit_player to attack enemy races with holy word playtested ---BEGIN BATCH UPDATE--- DAMN 9/17/1999 server/alchemy.c: - minor cleanup server/apply.c: - split multiple lighters server/attack.c: - vulnerability gives -4 to saving throw against non-damage attack effects - immunity to acid reduces the probability of corrosion - immunity and protection and not vulnerability to acid prevents corrosion - magic bonus improves item's saving throw against acid - vulnerability to drain doubles rate of exp loss, protection halves rate - holy word slaying is checked in hit_player, no need to double-check in hit_player_attacktype - prot:magic and vuln:magic affect all magical damage, not just raw magic - Holy Word and Turn Undead affect undead at half strength if they're not listed as an enemy race - Holy Word and Turn Undead have no effect on undead if they're listed as a friendly race - minor bugfix/cleanup server/gods.c: - minor bugfix/cleanup - luck slightly improves chance of divine intervention server/input.c: - fixed typo server/main.c: - trivial bulletproofing, probably no effect server/player.c: - sp regen penalty from armour calculated in fix_player instead of being recalculated for each spell point gained. server/shop.c: - payment will come from open pouches if you don't have enough in your top-level inventory - money for sold items will go into open pouches until they're full, then overflow into top-level inventory server/skills.c: - minor bugfix in throwing - writing in one of a stack of books seperates one book out first server/spell_effect.c: - generalized staff_to_snake to animate_weapon server/spell_util.c: - Staff to Snake, Dancing Sword, and Animate Weapon spells now all use animate_weapon function - holy golems avoid damaging their owners - raw mana spells common/living.c: - minor bugfix - fix_player now calculates sp regen penalty from armour common/readable.c: - spelling fix: grimore -> grimoire doc/crossfire.doc: - minor edits include/defines.h: - moved object type numbers to object.h - moved flag numbers to object.h - moved NROFREALSPELLS to spells.h - moved path numbers to spells.h - moved DESCRIBE_PATH macro to spells.h - moved ARMOUR_ and WEAPON_ macros to player.h - moved player state numbers to player.h - moved monster movement numbers to living.h - moved NROFSKILLS to skills.h include/global.h: - #defines from spells.h and material.h loaded early include/object.h: - now has the #defines for object type numbers include/skills.h: - moved NROFSKILLS here include/player.h: - added gen_sp_armour variable include/spellist.h: - added mana spells, Dancing Sword, and Animate Weapon include/spells.h: - moved NROFREALSPELLS here and updated it - now has the #defines for spell path nummbers - added mana spells, Dancing Sword, and Animate Weapon include/sproto.h: - added animate_weapon and pay_from_container prototypes include/material.h: - new lib/spell_params: - added entries for mana spells along with their fire equivalents lib/formulae: - minor spelling fixes to match minor spelling fixes in artifacts lib/artifacts: Weapons - Sanwe -> Gnarg (any weapon) chance 5, value x10, magic 0, dam 120% - Lythander (any weapon) chance 5, value x20, magic 0, luck +1, weight 90% - Gwormi -> Gaea (wooden weapons only) chance 20, value x50, magic 2, regen +1, dam 110% - Slay Demon -> Valriel (any weapon) chance 15, value x30, magic 2, weapon speed 120%, slaying demon - (new) Gorokh (any weapon) chance 15, value x30, magic 2, weapon speed 120%, slaying angel - (new) the Devourers (any weapon) chance 8, value x30, magic 1, attacktype: physical, cold, depletion - (new) Mostrai (axes and hammers only) chance 10, value x12, magic 1, dam 140%, weight 115% - (new) Sorig (metal weapons only) chance 5, value x15, magic 1, weight 95%, weapon speed 125% attacktype physical, electricity - (new) Ruggilli (metal weapons only) chance 5, value 15, magic 1, weight 85%, weapon speed 110% attacktype physical, fire Helmets (moved to after weapons, with the rest of the armour) - Lordliness -> Valriel (full helm only) chance 20, value x50, magic 2, Wis +1, Cha +1 - Uriel -> Sorig chance 10, value x20, magic 1, ac +1, armour 120%, prot electricity Shields - Theodin -> Mostrai chance 8, value x24, magic 1, prot fire - Gnarg chance 8, value x12, magic 1, ac +1, armour 180%, Cha -1 Gauntlets - (new) Sorig (gauntlets only) chance 15, value x75, magic 2, armour 10, weight 125%, attack: electricity - (new) Sorig (gloves only) chance 10, value x10, magic 1, armour 5, weight 125%, prot: electricity Armour - (new) Valriel (plate and scale only) chance 6, value x20, magic 1, armour 120%, weight 110% - (new) Gorokh (plate and scale only) chance 6, value x15, magic 1, ac +2, armour 110%, weight 105% - (new) Ruggilli (plate, scale, or dragon armour) chance 10, value x55, magic 3, ac +1, armour 120%, weight 90%, prot: fire - (new) Gaea chance 10, value x25, magic 2, ac +1, armour 120% Cloaks - (lesser version of cloak of the Underworld) the Devourers chance 3, difficulty 3, value x50, magic 3, weight 50%, material 0, Cha -2, prot: acid, drain, ghosthit, depletion Bows - (new) Valriel chance 10, value x15, magic 1, weight 110%, damage 200% - (new) Gorokh chance 15, value x15, magic 2, damage 160%, attacktype: physical, acid - (new) Lythander (not crossbow) chance 10, value x22, magic 1, weight 75%, wc +1, speed 150% - (new) Ruggilli (crossbow only) chance 10, value x18, magic 2, weight 85%, wc +1, speed 110%, attacktype: fire - (new) Sorig chance 12, value x20, magic 2, weight 95%, wc +1, speed 125%, attacktype: electricity - (new) Mostrai (crossbow only) chance 5, value x50, magic 3, damage 140%, speed 75%, attacktype: weaponmagic - (new) Thunder chance 10, dificulty 5, value x10, magic 2, weight 90%, damage 150%, wc +2 attacktype: physical, slow, paralyze ...and a few minor spelling fixes ---END OF BATCH UPDATE--- DAMN 9/17/1999 Add crossfire.oc.humbug.org.au server information to README file - msw Change compress method definitions from being determined by checks on system type to having autoconf find the utilities for us. Also, add bzip2 support. Files affected: Makefile.in configure.in common/map.c server/init.c server/login.c include/config.h include/define.h include/autoconf.h.in - msw Fix in server/rune.c - if the victim of a trap/rune is not on a map and the object has a disease, it would crash the server. Temporary fix put in to make sure there is a map, and if not, use a predefined difficult of 1. I think the real issue is how can an object not on a map be setting a trap (in this particular bug, reported by Klaus Elsbernd, the victim was a thrown object) - msw Change by dragonm@absolut.tegris.org - improve crossedit so that if you try to load a map you alreay have in memory, it will raise the window - it will also give you the option to forget, save changes, or just raise the window if the in memory version of that map has been modified. Checked in by msw. (crossedit, App.c, Edit.c, Edit.h) Bugfix in server/apply.c - apply_container() When checking for keys to locked containers, only searched player's inventory, not keyrings. Changed to use FindKey function in player.c, which does search keyrings. --DAMN Bugfix in server/main.c - enter_exit() Unique maps were using their actual location as a path for moving to a new map. They need to use the location of the original map, not the character's individual copy of it. This is re-constructed from the individual map's filename, which is based on the original path. --DAMN Remove xbmtobdf man page - since it is run automatically and it is likely that people will not run it manually (and it appears to be innacruate - or at least imcomplete), may as well remove it. - msw Change install location of man pages to section 6 instead of section 1 - msw New man page submitted by Egbert Hinzen that is actually correct and accurate as the options now relate to crossfire. - msw This one is a suggested fix for the alchemy bug that grants obscene amounts of experience for certain formulas. Those formulas are the ones that create items with a high fixed level, because those items are pretty worthless otherwise. Dust of Repelling Undead, for example, is level 30. The fix I implemented here is to base the chance of success largely on the level of the product, so it's very difficult to produce something like Dust of Repelling Undead, and therefore worth the extra experience. The chance of success is now based on the following factors: 1) level of product 2) number of ingredients in formula 3) rarity of formula as listed in "formulae" data file 4) number of batches being made 5) Alchemy skill (if present) 6) enchantment of cauldron 7) luck patch from DAMN This one makes a couple things level dependent that used to be fixed: 1) time it takes Word of Recall to take effect 2) amount of energy transferred by Transferrence spell 3) percentage of energy drained by Magic Drain spell Also, the following effects have been modified: 1) Followers of a cult that considers undead enemies have a penalty to Command Undead. 2) Magic Drain gives back to the caster a small portion of the energy drained from the victim. And a bug was fixed: 1) SP_level_dam_adjust used and SP_level_strength_adjust used the player's level, where they should have used the caster's level. --Patches from DAMN, applied by PeterM Marker object added, alchemy modified so that recipes can require keycodes and MARKS to execute, detectors modified to be able to detect MARKS, and all of this documented in crossfire.doc --PeterM server/gods.c -- changing gods now costs players their special prayers. --PeterM server/alchemy.c -- levels less than ten no longer produce cursed items, but only slag or nothing. --PeterM server/shop.c -- unidentified stuff is worth at most 60gp or so. ---PeterM random_maps/style.c - fix type in the scandir function which cause compilation problems for those systems that actually need it. - msw Change command_cast_spell so that it preserves a return value from find_spell. This re-enables partial spell matching (ie, cast prot will show all spells that start with that.) - msw ------------------------------------------------------------------------------ Change for 0.95.4: Add better comment in config.h about the DM_MAIL option - msw. Fixed and doc/playbook/Makefile.in doc/spoiler/Makefile.in so it works with autoconf setup. Updated to properly generated handbook.ps when needed - msw doc/crossfire.doc: Updated with disease code notes, detector notes. crossedit: Fix in edit.c to ensure map objects (mainly is_floor objects) are actually removed visually as well as from a pure object standpoint. Change to save_throw_object: If object is in players inventory and is destroyed, send update to client. This can happen when trying to ignite something in the inventory with flint and steel - msw. In apply_lighter, do more accurate check when seeing if the attempted object was actually destroyed. Also, cache the item name so that if it is destroyed, we have a proper name to print out. - msw fireborns changed to have Pow stat bonus instead of Wis stat bonus. --PeterM Some problems in the random map code fixed: specificially, 1) fountains no longer attempted placement outside map 2) Ignore files/dirs named CVS when looking for styles. I changed a few of the maps to have exits to random maps. I made one random house in Scorn, one random exit in the Hall of Bones to an undead maze, another exit to a random map in the hole SE of Scorn, and one in the bottom of the Tower of the Stars. --PeterM Update lib/Makefile.in to create empty bookarch and temp.maps files as part of install process. - msw Change configure.in script so that by default, files will be put in installdir/var/crossfire and installdir/share/crossfire instead of just installdir/var and installdir/share. This allows crossfire to be installed more cleaning without it having its own top level directory. Old installation behaviour can be gained by using --enable-old-layout when running the configure script. - msw Patch by Carsten Pluntke that fixes a problem with unique maps not being properly reloaded after being swapped out (main.c) - msw Fix so that when picking up objects from a container, the client gets an update to remove the object display from the container (ie, if you pick up all the gold coins from a container, the total in the players inventory always got corrected, but the client still displayed some in the container even if there should not be.) The change is in c_object.c - msw Check that hitter has a valid name before it attacks - fixes some crashes (attack.c) - msw Enhance lib/collect.pl to ignore CVS directories - msw. Improve auto_apply functions so that it will create treasures (random_* items) inside other objects. There is still a limit in that it will only look for these objects inside other top level objects - a random potion inside a chest inside a monster will not be processed. But that should be a rare case, and nesting containers very deep has never been well supported in the code. The code affects is in the apply.c file. -msw Add Xaw to start of libraries when linking crossedit - fixes focus problem. File affected configure.in - msw Fixed a bug in the "depletion on death" code. The depletion never had any stat removal specified. --PeterM Remove berzerk code/variable from player structure. The code had no effect - whatever functionality it once had has been removed in the past. - msw Add flag save information for FLAG_CLIENT_SENT that was otherwise missing (loader.l). This fixes the disappearing archetype bug - msw Fixed buffering bug in lowlevel.c --David ------------------------------------------------------------------------------ Changes from Crossfire 0.95.2 to 0.95.3: Fixed missing god animations in the archetypes. SIMPLE_EXP option added. From config.h: * Define this if you want to use the new (0.95.3) experience system. * The system has the following changes: * * 1) 2000 exp need for second level. All additional levels are shifted * accordingly. * 2) Your stats in your skill categories don't affect the amount of * exp you get. * 3) Your level difference doesn't affect the exp you get for killing * monsters. * * If this commented out, you get the old system. * * This can also be set by using -simple-exp/+simple-exp as a run * time option. Change treasure lists so that stat improving potions won't show up in shop. They should still show up on the ramdom_potion spaces on the maps (may in fact be slightly more common there than before) Move socket related code out of server directory and into socket directory and re-arrange cod so that what is in what file makes more sense. Code from Peter Mardahl to have death result in stat depletion and not actual stat loss. Setable by via STAT_LOSS_ON_DEATH option in config.h or -stat_loss_on_death/+stat_loss_on_death command line options. Patch by Peter Mardahl to change immunity spells from PATH_PROT to PATH_NULL - this will stop gods from giving out these spells. Patch by Peter Mardahl so that players will never fumble the reading of scrolls. You only get half as much exp for reading the scrolls now however. Update the README file - the list of public servers was grossly out of date and mostly removed. The instructions for running/playing were out of date, containing information for servers with the old X11 code. Change CAN_MERGE so that identified items with different been_applied will merge (this is currently done by just setting the been_applied flags for the object in CAN_MERGE if they have been identified) Temporary fix for disease code - I was seeing endless loops in weight contributions because an disease object op->env points back at itself. In do_symptoms, we check to see if the victim matches the disease we are about to infect them with, and if so, don't proceed further. The cause of this pointer recursion needs to be found instead of this current fix. Change daemon.c so that hpux systems can also use ioctl (.., TIOCTTY, ..) call in addition to SYSV systems. players and logs command added. players show all current player names currently in use, logs show sockets that are currently listening for kill log information. Add limited support for some commands from the socket (hiscore, logs, maps, motd, players, version, who). After socket has been authenticated to have valid server, shout and tell also available. To switch socket into old style mode, first command entered should be 'oldsocketmode'. Server code then knows not to prepend packet length information, so most functions work on this new socket without any changes. Add verify_player function to login.c (takes name and password and verifies they are ok - used for old socket emulation). Also notify all players when a player joins the game (this must have gotten removed at some point). change prototype for cs_write_string to take a constant string. In readpacket, have it read in 100 bytes even if length information looks incorrect (allows easier initial switching to oldsocketmode). If the length of the input buffer is for some reason negative, call abort. Clean up nconns in socket.c - it was being increased 2 times when a socket was added, and decreased by 2 when a socket was removed. Add newline to initial version command so people telneting in for old socket compatibilty get something a little more presentable. command char pointer added to newsocket structure - used for player name or listener html address. Fix in memory overrun/corruption when freeing the last allocated socket - it would write data beyond the allocated data. if new_draw_info is called to notify everyone, also notify sockets running in old mode if it isn't a kill log listener. Update commands.h file so that it won't declare various values if included multiple times - only the first time it is included will it declare the values. Add extern declaration for init_sockets to global.h since other functions now need to access them. Who command extended to also show active socket connections without a player attached. Kill log (watchable from socket) added. Add support to use old socket commands on the new port. Fix by Seikoh Nishita for weapons that slay multiple creatures - before fix, they would not slay anything (args to strstr were reversed) Don't give out exp for orating to monsters owned by another player - fixes abuse since 2 players could quickly orate back and forth and gets lots of exp. The orate function was also cleaned up a bit to be more efficient (presumption is made that there is only 1 monster on any one space, so once we find one, there is no need to do further processing) If door is passable, print a message to the player if he tries to pick the lock and don't let them pick it (examples here are the doors which you can walk through) Fix by Seikoh Nishita that should prevent some crashes when exiting shops - appears that there could be circumstances when i was trying to referance a null pointer in an error message. Add popen_local for sgi systems - without this, sgi can only open one compressed map before it fails to open further compressed maps. Fix by Timo Kokkonen so that resurrection works with the new player save method. This should also fix the problem that dead players when using PERMADEATH being able to log in after dying. Allow FORCE objects to increase digestion/hp/sp/grace regeneration. Remove style.h file, since we now have an automatically generated proto file from random directory source. Also fix in makefine to use proper ar when creating the archive. Add 'race *' to maps/styles/misc/fountains - this fixes a crash when entering random maps. If use presses an incorrect key at the play again prompt, reprint the play again question. Change find_free_spot to return -1 if no spot available, update calls so check for this return value instead of 0 (value = means current spot available) Change pet movement so that pets should no longer jump walls. Update configure, makefiles, and code to use proper locations of installed files (no longer $prefix/lib, instead $prefix/share for read only, and $prefix/var for read/write. When using a special key to open the door, print a message informing the player what key was used to open the door. Minor map cleanups/changes. Some improper exits changed to point the right place, extraneous style maps removed due to new gods, other maps updated to replace now missing altars with their replacements. Change gate code logic so instead of using speed to determine if the object can move itself, we instead check the ALIVE flag (this fixes problems for animated objects, and is a more accurate method in any case.) Fix by S.Nishita so that containers on the ground get properly unapplied when player moves off them. Fix by S.Yoshioka's so that damage for cone spells is calculated properly as they propogate. Remove server side referances to INFOLINES and INFOCHARS, since that is now controlled by the client. Code cleanup to random map generator to prevent compiler warnings. Also, change comparision of val == 0x1 to val-1 = null, since the later is more portable. added some missing newlines to log messages in the newsocket.c file. fix pickup modes some - mode 4 appeared to work ok (pickup all), but mode 5 wasn't working right (pickup all and stop). I have tested the modes with the X11 client, and they all appear to work properly. House of Healing map (with link from starting city) added by Peter Mardahl. Change player move code so you will no longer swap spaces with a pet monster/other friendly object is you are braced. Fix off by one error in the buffering socket buffering code - this would cause buffer overflows if the data being added equaled exactly the buffer size+1. Similar fix when reading in packets Increase NROFATTACKS to 24 in define.h so the AT_INTERNAL attacktype work properly. Patch by S.Yoshioka so that godpower/holyword spells are not magical. Fix in attack.c by S.Yoshioka to call free_object instead of free for splitting monsters. Fix by S.Yoshioka so that magic bullet or other pure magic spells do damage to other parts of multisquare monsters. Fix by S.Yoshioka so that you can not get exp in other skills with cone spells. Fix by Seikoh Nishita so that magic walsl can not be placed on top of other walls/monsters. Fix by Seikoh Nishita so that we don't clear the NO_STEAL flag on insert_ob_in_map - this makes singing/stealting from the same monster multiple times impossible. Patch by Seikoh Nishita so that boulders will roll off gates. Have server send updated weight of container when dropping all items from a container. New random map decore styles for new religions added. Patches from James Cameron to fix compile errors/warnings. Fix missing animations for some of the gods. Remove *.orig files from maps/picks directory. Maps updated wtih dtabb 2.60, navar_city 2.40 maps from John Cater. ------------------------------------------------------------------------------ Changes from Crossfire 0.95.1 to 0.95.2: speed_left values should not be changed when loading/saving maps with the editor. Map updates from Anthony Tyson and others (990128 version) Note: I was unable to reproduce the staff to snake killing the client bug. If still in this client/server release, please let me know. Set player->count in esrv_move_item when picking up objects. This fixes a bug introduced in 0.95.1 for the improved pickup code which only allowed picking up of all the objects on the ground. lifesaving items should now disappear from client inventory after they are used. Improve decrease_ob_nr so that items dropped on the ground will get removed from the players inventory if they are used up (fixes bug where you drop the last of some item on an altar but it would not disappear from your inventory) Add check to add_exp so that we don't add experience to non living creatures. This should fix the thrown objects getting lots of speed bug. Random map code by Peter Mardahl added. Various changes made so it will compile on non gcc systems as well as non bsd systems. Another fix for pits (holes) so objects should drop through. The fix in the last release made fixed a possible infinite loop, but also made it that once an object on the pit could not drop through, no other objects on the pit would drop through. The change made will attempt to drop all objects through the pit, but also not run into a problem with infinite loops. Update pedestal and detector code to also match on the lockcode of the special keys. Change detector function to call push_button instead of update_button. The later would only change the state of buttons, which doesn't do much good when you want to open a gate. push_button will cause gates and other connected objects to open. Change move_gate so that it won't roll off things like grass or other immovable objects. Update configure script to check for scandir function (needed by disease code) - if not found, then check in -lucb. Disease code from Peter Mardahl added. add break value in while loop in generate artifact message (readable.c) so we eventually break out if no match is found. reduce minimum supported map size in crossedit to 1x1 Don't let characters be easily saved on unholy ground. Player can't issue 'save' command when on unholy ground, and we don't autosave if on unholy ground. Improve pickup code mode 6 (pickup magic item) - call is_magical to determine if an item is magical instead of relying on known_magical flag. If the player has a marked item in need of identifying, identify that specific item first when an apply altar is used. This allows a player to selective choose what to identify. Fix in apply code between server and client. Containers on the ground now work properly. Server side simplified a bit, and updated to be a bit more bandwidth efficient (use update item to open/close containers.) Client updated to handle updating its container status via the update commands. Fix in pay_for_item in that it will not mistake kobans or other coins for gold coins when making change (or converting the older coins into new coins with the same arch but with a different value) Have player swap places with pet monster even if player no longer has peacful set. At confirmation when player quits, inform them that quitting will delete the chararacter. When a weapon is improved by the god, if it had no prior attactkype set, give it physical attacktype in addition to what the god gives it. By default, make new players peaceful. Fix up the fire cancellation function - it seems some of the code wasn't quite right (inserting in map vs setting the owner.) The fix should prevent some core dumps this could have caused. Fix for main loop in socket.c that should prevent infinite loops when a socket dies in some improper way. It should now drop the connection properly and continue with processing. Autoconf fixes - check for canonical system, specail check for alpha-dec-osf to add -std1 to cflags, add check for latex, add check for BOURNE_SHELL (this is used in hte makefiles, as some os's will use the users shell, but some constructs we use require bourne type shell), add check for number of args gettimeofday uses, change order when we create the makefiles to be proper. Use autoconf check above to get correct number of args for gettimeofday. Fix from Anthony Thyssen for the editor - should hopefully fix problem with delete not deleting the correct object. Remove font displaymode from editor - since we are not distributing any fonts anymore, doesn't make a lot of sense to support it. When connection is lost from player, save off the character - prevents items being dropped on the floor or the players duplicating the items. However, some additional logic will need to be added to prevent players from saving their characters in treasure rooms. Improvements in save_player which should better prevent saves from happening at inopportune times (like after they have mostly exited). Add stat_loss_on_death option (yes/no if stat is subtracted when you die.) Default can be set in config.h, and can also be changed with run time flags. Add / behind -I@x_includes@ in crossedit/Makefile.in. This should prevent the includes from being reset if there are no x_includes. Extend draw_look to send multiple item commands - this should only happen if there are a lot of items on one square. Fix should prevent crashes/memory corruption in that case. ------------------------------------------------------------------------------ Changes from Crossfire 0.95.0 to 0.95.1: Fix server crash if player ran into friendly object. Strip extra spaces that may be between the command and option (ie, "use_skill disarm" would result in " disarm" getting passed to the appropriate command function. Some functions could deal with this, others did not, and it makes sense to strip them out. Send update to client to remove item from players inventory when it disintegrates (demon ichors for example). Change load code so that player handling on unique maps should work better (I believe there were various strange cases if the player saved on a per player unique map and that map was or was not in memory, it might not load the per player unique map) Removed player file lockin during login. Extra lock files get left laying around in aborted login attempts. And in retrospect, I don't think it is ever really needed. Some excessive/annoying debugging messages removed. Some general cleanup in some functions that were previous setting automatic variables. If the variables are none changing, we now declare them static, otherwise we don't set the value as the initialization area - this prevents warnings with some compilers. Some casts added for some functions to also prevent warning messages. Remove HAVE_SAVE_UID in config.h - no longer any code using it. In free_player, only call remove_ob on pl->ob if it is not already removed. This fixes crashes when a player kills there login session before it is completed. Instead of calling draw_look (which causes all data on that space being sent to the client) each time the space changes, instead mark that we need to send that change, and have code higher up (top processing loop) send the data each tick if it needs to be send. This should result in less data being sent, and is easier to process. Add flag_client_sent for debugging purposes - makes it much easier to trace down cases where server was sending updates without actually having sent the object yet. Most all of those cases are fixed with the new draw_look logic mentioned above. Add dump_object_from_tag to figure help figure out the objects generating messages. dumptag command is available from within the game if compiled with DEBUG to use this fucntion. Pup land maps updated to version 1.3. Fixes in configure script to autodetect X11 libraries better. Fixes also in Makefiles so all rules should work and all needed variables should now be expanded. Add checks for a few more header files. Makefile fixes also include changes so that archive is packed in proper order that it should not try to rebuild pregenerated files. Master makefile now set to make bzip2 archives in addition to gzip archives. Added watchdog code from Christian Stieber - periodically sends out UDP packets so other programs can watch for them and restart the server if it doesn't see them (hung or down server). Added ISQRT macro to spell_effect.c - seemed that the code was changed a while back but that function wasn't added. It was only needed of SPELL_FAILURE_EFFECTS is compiled in as an option. Simplify checking of MAXNAMELEN in crossedite/include/Posix.h Updated list of options you get when you do -help - removed old options that are no longer around and added new ones. Dropping an active container will now result in all the items in the container being dropped, and not the container itself. It could be argued this should be a client issue (client send a move for each item in the container). However, dropping everything in the container should be faster than individually dropping (ie, you turn the container upside down), and client dropping them one by one would result in that many commands of the player being used. Change esrv_move_object to use the pick_up function instead of pick_up_object. The difference here is that pick_up will look for matching containers, so players manually picking stuff up in the client will have items go into active containers as appropriate. However, this can also cause problems with smarter clients that really want the object to go into the players inventory and not a container (I don't think any will have that problem currently) Fix in apply for holes - return 0 if we can not move the monster through the hole - this prevents an infinite loop in move_hole in time.c Added internal buffering for sockets if the OS's buffers fills up. This greatly improves reliability in the client. Size of buffering is setable in config.h Fixed makefile dependancies - make install should now depend on the actual programs it plans to install. Fix some bugs in the animation code - most notable is animations with just 2 facings like the quetcoutal. Changes to archetypes is to change the half orc to have 4 facings the quetzalcatl to have 2 facings. Fixed animations to always use the direction value for determing object animations. Change examine code so that if the first thing in an object message field is @match, don't display the message. Fix map update code that wasn't calling update_los before sending the map to the client. Fix from Timo Kokkonen for socket code - check to see if we got an interrupted system call (EINTR) on a read/write - if so, loop until it clears or we get a real error. Apparantly greatly improved reliability of the server. ------------------------------------------------------------------------------ Changes from Crossfire 0.94.3 to 0.95.0: Added diagnostic message if you try to use a skill and it can't find a match Fix in send item command to better handle objects with a huge number of items in its inventory. Shop listing code simplified - send all data to the client at once instead of havign to store it and wait for the player to hit a keypress. Fix bug in ghosthit which would cause server to crash (patch for 0.94.3 was released for this bug) Some general code cleanup - fixing/removing unreachable statements, removing unused variable. Build/configuration now done by autoconf (run ./configure). This cleans up a lot of special checks throughout the program, and hopefully should be more portable. Cleaned up/rearranaged the include/.h files. Prior, most all structures where included in structs.h. Structures and support values now in unique header files (ie, player structure and support enums and like in player.h, object structure and support in object.h, etc.). This doesn't change the working on the code, but is just easier to maintain. global.h takes care of including these is the correct order. Many options now removed from config.h file. Options removed either relate to X11 code/old server support or machine specific details which we can now pick up via autoconf. Better speed checking in update_object_speed. When improving a weapon, client should now get updated (code was updating the incorrect object) Improve apply below to be more bug free (that is to say, we preserve the pointer to the next object - I think there were cases where the last of an object was applied, and thus removed, but the apply function did not return a code specifying something was applied, so the code would then try to apply an object with an invalid pointer) Fix for collect.pl script to fix problem traversing directories. (note for 0.95.0, there were many large scale changes, so many of the entries below are more of just an overview of what changed, and not a highly detailed account of the changes.) Fix/improvement in player movers so that players trying to run in the direction they move don't move incredibly fast. They will still seem to move faster (I am guessing roughly player speed + mover speed now). I am not sure of the original bug, but my guess is that the mover moves the player to the next mover (which has a low speed). But now the player still has his own action left, and moves to the next mover which has high speed, so wisks the player to the next mover, which has low speed, so he effectively moves 3 spaces in one tick when he should just move one. Changed save player method so that a directory is created for each player. Added per player unique maps (new apartments). Maps from Christian Stieber, however the implementation is a bit different - if an exit is marked as unique, it will lead to a unique maps. The unique maps are stored in the new player save file directories as above. Removed all X11 support from the server code. Change crossedit so that it can read in the pixmaps as they are stored in for the client/server support (so that only 1 copy needs to be kept). This method of reading them in is slower than the montage method unfortunately. Changed socket handling. Port 13326 has been removed from active service. Socket information is now part of player structure, which cleans up a lot of the old code which had to do with find the player that correlates to a socket and vice versa. Fix bug so that if invaliad variable is given to dm 'patch' command, program no longer crashes. Fix bug so that containers that have a huge number of items don't crash the server (a container needed to have more than 250 items for this to happen). The real problem is containers that allow an infinite amount of junk to be stored in them (Lepreds bag, but this item/map isn't part of the standard distribution). Even with the fix, there still becomes some point where problems will occur (around 2000 items, the amount of data that needs to be sent would exceed the size of the output buffer). In any case, with that many items in place, the player will see a noticable performance hit when such containers are opened. Fix bug that caused the program to crash when attacking ghost or other creatures with ONE_HIT flag set. Print out message to player if they have old keybindings. Some map fixes by Christian Stieber - eliminate ability to bypass quest and typo fixed in other map. Fix so that perceive spell (off of rods/staves/scrolls) properly finds the god of the player. ------------------------------------------------------------------------------ Changes from Crossfire 0.94.2 to 0.94.3: Fixes to some recipes - before some had non existant ingredients. As part of this, a treasurelist for ogres added. archsearch.pl function added to lib/adm. Useful little perl script that can do object context searches (ie, immune to X and attacktype of Y) Old loader code removed - only lex loader supported now (no bugs reported, so it seems to be OK) Debugging output improved in various areas to be easier to read/better inform what is happening. Hopeful fix in place to prevent player movers causing players to have -infinite in speed_left. Fix right now is to just limit speed_left to -50 - I believe the real problem is that some player moves have speed=0.0, and it is diving by that value. Fix so that if a player dimension doors onto a player mover, he no longer gets stuck in an endless loop - he will now move along the movers as expected. When a player dies in NOT_PERMADEATH mode, clear the braced flag. In the case of spell failure, don't cast mana storm in no magic areas (instead, just kill the player) Only write out an updated bookarchive if data has actually changed and needs to be written out. Don't print out new client server usage logging if nothing has changed. Reduced power of 'loose mana' (it appears this only happens when a spell is failed really badly). It seemed to me that the area of affect and damage could be many times deadlier than anything else out there. Hopeful bug fix for thrown objects getting very fast speed (I am unable to reliably reproduce this, so am not sure.) Basically, I believe the problem was that set_owner was only being set for the wrapper in the thrown object, but it is the actual internal object that gets used at some point in the attack sequence. As such, I believe that the knife, spear, whatever was getting the exp for the kill (exp = speed in weapons). To hopefully fix this, I have also added a set_owner call on the real object so when it goes to grant exp, it should find a valid place for it and credit the player and not the weapon. Changed spell parsing so 'of' is not needed in some complex spells (ie, create food or marking rune). From kfitzner@nexus.v-wave.com Fixed bug in which you could kill multispace monsters with paralyze or slow attacktypes. Added ncom and comc commands to client and server. These commands allow client command queing/dropping (note that server will only send a comc if it gets a ncom first, so old clients should still work just fine). The protocol numbers increased to 1021. Added more objects to the show invisible list - hopefully the pupland maps should now be fully playable. RPLAY_SOUND definitions changed to RPLAY_SND - should make for cleaner compilations for those using that. Fixed #ifdef for NetBSD in common/time.c to use proper symbol. Fix so that counterspell should no longer kill monsters with magic attacktype (ie, jessys and probably others) Added debugging in deathstrike code to hopefully be able to better track down face of death problems. My guess is that it is a problem with level comparisons. Fixed/clarified many nexted if/else statements that were ambiguous. Now braces are properly in place (From Klaus Elsbernd) Hopeful bug for disappear objects when emptying bags. I believe the problem was that invisible objects ended up showing up in the containers somehow - this by itself is not a problem. However, the empty bag function calls drop with the object to drop and keeps the next value - however, drop would forward past the invisible object so the calling functions next value is no longer accurate. Drop function now does not skip over invisible objects in containers (will skip over them in player inventory) - it instead removes the invisible object since I believe it is garbage anyways. I am not sure if this will fix the problem, but there was certainly some problem in the code here. Fixed bug with multipart monsters & pits. Before, they got split into a few parts like a magician trick. Now they stay in one piece. At current time, the logic probably isn't great, as all that is currently checked for is the head of monster being on a pit - in reality, probably all the monster parts need to be on a pit. -m9 and -mt options added (Code from Raphakl Quinet). Formulas have been fixed such that all are now creatable (none missing archetypes). However, the output still shows some formulas out of balance in terms of costs. Changed AT_GHOSTHIT meaning and added ONE_HIT flag. GHOSTHIT is now treated like any other attacktype (monster will not be removed just for having ghosthit). ONE_HIT flag now means the monster will disappear. This fixes the acid sphere deadliness (before, they did have ghosthit as an attacktype). All the objects with ghosthit have been updated. However, there are probably some other undead which could now have ghosthit added to their attacktypes since it won't cause them to disappear now. Updated the programming_guide doc. Hopefully, it is a bit easier to read and a little more accurate. Improved polymorph. Invisible objects should no longer appear. Also improved so that all objects of a type would be possible results (before, it would be the first 80 weapons would be chosen from, or the first 80 monsters, etc.) Now it is unlimited. Smarter initial selection should also result in a few less meltdowns from it now being able to find an acceptable object. Also, possible fix that could cause crashes on rare occasion (monster polymorphed into something else, and when inserted into the map, something on that space kills it) Also, we stop processing a space once we hit the floor - I don't recall floor types ever changing anyways, but there could be other problems processing subfloor items. ------------------------------------------------------------------------------ Changes from Crossfire 0.94.1 to 0.94.2: Changed calls to send_query on server side to include the string on what the query is for. This is to make clients be able to do smarter/nicer things when it receives a query. Bug fix in check_walk_on which would cause crashes when objects are put on spaces with multiple destructive forces (ie, earthwall cast on top of a double pool of chaos). Once check_walk_on finds that the item has been freed, it stops doing any further processing on it. Animation code cleaned up. Animations are now object properties, and not archetype properties (and thus can be changed in maps). Also cleaned up so that the is_turning flag is removed - more complex animations available via the num_facings. Below is the section from the TODO file. Note that there is still potential to improve animations (many 1 frame animations could take advantage of the new code to have multi frame (ie, players can now have images for all directions, and animations for each of those) New code is in common/anim.c: Clean up animation code and make it more general purpose (instead of is_animated and is_turning flags, instead add a value that states how many animations/direction there are. For example, right now the big dragon has 8 animations and 2 facings (left & right), with 4 animations/facing. Something like num_facings could be added so we know there is 2 facings. For arrows, num_facings would be 8, so we know that it shouldn't be animated (since there are only 8 images in its animation.) This would make the code a little cleaner, and allow better/ more complex animations (an object that faces 8 directions could have animations for all directions, were as right now, that is not possible.) collect.pl changed to handle generation of animation file. Wipe below added to crossedit by Steven Unruh removed non NEW_HIT_PLAYER in attack.c (ie, old attack code removed) Added hitback code (looks like it was missing from the NEW_HIT_PLAYER code) dm commands will now be accepted from the new client (provided they have dm priveledges of course) Add AT_INTERNAL attacktype used only for internal calculations (ie, does that amount of damage). Actual damage section of poison now uses this. Fix spoiler generation - don't convert monster archetype names to lowercase - images generated properly for them now. Also, fixed problem with some images (dragon) being rotated when they shouldn't. Clear INV_LOCKED flag when stealing objects. Fixed couple of bugs in throw code. First, players remaining speed calculation seemed incorrect. Second, you can now specify an object name to throw (ie, throw ring, throw chair). Third, the client now gets properly updated with the new/changed item. Make UNIQUE_ITEMS standard feature. Removed LOCK_ITEMS as a secondary feature - running multiple servers against the same set of files is no longer supported. Note for compatibility reasons of both methods, it will look for unique files starting at v00 and will write new ones with the .v00 extensions. If you have .v01 files, these will be read in the first time through (provided you also don't have a .v00), but all new files will be written with the .v00 extension. Referances to ITEMS_DIR changed to be UNIQUE_DIR - I think that is more descriptive. This includes the environmental variable. Change ok_to_put_more to do more complete checking and also not to stop spells because of a monster with certain immunities being on a space. If hit_player is called with the 'tail' of a monster, it would previously just exit if the attacktype included slow or paralyze functions (must hit the head with those.) Changed hit_player so we just remove the slow and paralyze, and still hit with any remaining attacktypes. change explode_object so it only hits the monster once with the bullet/ meteor. Previously, it called hit_map, which then hit the player, and then called hit_player again. This effectively doubled the amount of damage caused by the bullet - it now does the correct amount of damage. As best as I can tell, meteor/meteor swarm does properly damage the monster even if the tail was hit. Bug fix in singing so exp should now be granted the first time singing is used on a monster. Changed so that server can be compiled with new client/server support but without old (port 13326) support. Various sections of code updated to work/compile in such a setting. Fixed premature freeing of map->tmpanme. Now in delete_map instead. Added checking in free_object to see if we are called on a non removed object. IF many cores is defined, will dump core here. I believe there is some section of code calling free_object on a monster without calling remove_object, which is causing a lot of error/warning messages when it happens (very infrequently.) With this test in, it should become quite easy to track down when it happens. Added free bsd & net bsd to those systems whose gettimeofday takes 2 arguments (common/time.c) -lcompat added to libraries needed for FreeBsd. Include unistd.h on freebsd. Don't include malloc.h in xbmtobdf.c on freebsd. Sample ban_file added to lib. Read in of ban_file will now ignore lines that start with #. Also, animations file (used for new animation code) included. Config file rearranged to hopefully be in better sections and easier to edit. NEW_IMPROVE_WEAPON and SIMPLE_PARTY_SYSTEMS removed from options - now always selected. NO_LOG, ONE_PLAYER_PR_UID, CHRFONT removed from sections - these can never be valid. NO_ADD added to prevent players from adding others Server updated to send full lines of text with query commands to client so for clients that pop up a dialog box, they can print meaningful data on what the request is for. Bug fix so that you can no longer apply multiple objects of the same type with apply -a Give better messages when attempting to light something. New client/server statistic gathering added - will periodically dump usage stats to the log file. Server will now longer crash if client/supposed client sends bad data - will now just close the connection instead. Server will not longer crash when player runs into a door. Can now longer polymorph objects into items that are invisible. Removed client directory from main archive. Too many people thought that was the new client creating confusion, and I don't see a big need to have it around (it will go away when the X11 code is yanked from the server anyways0. If you still like it, the old version of it will work just fine (no changes have been made to it in a very long time0 Map changes: color_ removed from map files. library card cost decreased some. oldcity maps updated to take full advantage of XPM mode.. Lake_Country/DA map changed - exp reduced, sp increased. ------------------------------------------------------------------------------ Changes from Crossfire 0.94.0 to 0.94.1: in artifacts file - moved some settings of difficulty before Object line. (difficulty after the Object line have no effect) In low level socket code, retry read/write again if we get a EWOULDBLOCK in addition to EAGAIN errors. Some systems return EAGAIN, others EWOULDBLOCK Fixed possible crash in move_monsters. I believe the problem was that the monster got killed by a door, and the function was not expecting it, and would use the invalid object. Not sure if the code I put in will really fix the problem, or just migrate it to a higher level calling function (have not seen the crash myself) If on linux, include crypt.h in main.c Various minor memory leaks fixed. Better error message for non wiz people trying to use shutdown command. Shutdown command actually added to command structures and is now usuable. Internal animations changed from explicit defines to use SET_ANIMATION macro. Much easier to read, and better supports client side animations. Include sounds.h/sound calls no matter what RPLAY is set to. Only rplay special code is in sounds.h. This way, client can still get sound information without rplay being defined. removed NPC_PROG code - not used at all - only thing there was a few #ifdefs setting values. Moved typedefs for function pointer stuff from structs.h to funcpoint.h. No outside affect on code, just makes more sense internally. Disable default selection of DEBUG_DMALLOC on crosssite.def Removed old/unused charisma bonus values from common/living.c Minor fix so that a space is properly added between item number and name. Added a lex loading routine. Performance seems to be roughly the same, but ease of maintenace/readability seems better to me. Modifications to loader.c should not be done - instead, they should be done to loader.l Loader directive flags and loader return flags added to loader.l - those are now used instead of arbitrary integer values. Fix c_wix.c dm goto command to set the destination object/map name. Otherwise, if an invalid map was entered, the enter_exit would try to print a null string - some systems handle this OK, others will crash. Changed common/time.c to use GETTIMEOFDAY macro defined once at top of file instead of having #ifdefs throughout the file. Fix so that items of differing values will not be merged. Also, when merging objects, do not clear startequip flag. Fix in doc/playbook-html so all include directives are handled properly with the include_html.pl script. More details printed about improved weapons (how many improvements done, max number of improvements.) Also, skills will show how many improvements the character can handle. Bargaining skill will be auto applied when in shops. Change teleporter code so the teleporter does not have to be the first or second item on the space - teleporter can be any object on the space. -a, -u apply options added (always apply/unapply instead of toggling). Internally, apply and apply_special have been changed to take one more option which is this flag. Applied rings will not be merged - instead they will remain seperate. Fixes problems with getting full bonuses, and also makes it easier to apply/unapply one item. Increased frequency of generation for strange ring (nodrain ring). This should make it appear probably roughly as often as the ring of life, or maybe even more often. Put maximum carry limit in - beyond the limit, a character can carry no more. This limit is fairly high right now, but should improve playbalance and prevent characters from getting a negative weight or carrying so much stuff it takes forever to move (session appears hung to them) Added CS_STAT_WEIGHT_LIM to newclient.h, so client can know how much the player can handle (only used for GUI, so it can do a carry/limit type of thing) Title information now used in hiscore displays. Show invisible spell will now make handles visible. New server code won't crash if player does nothing when it prompts for the name. Also, include necessary dummy functions so server will compile of ERIC_SERVER is not set. Will now search keyrings when running into special doors for matching keys (players can protect keys by putting them in other containers.) Change jump skill so that any spaces with FLY_ON set will affect the jumping player. This prevents the character from jumping over player movers. In create_wall - if insertion if the initial wall fails (new all is destroyed), don't extend the wall. Fixes the earthwall on top of pool of chaos which creates strange map problems. Map fixes: Lake_Country/ebony/masterlev altar should now accept fragment of chaos. Put no magic areas in apartment so it should no longer be able to dimension door and get keys. /city/houses/wizz.entry should now be entered at the correct position. /city/misc/library - library cards are now identified, so it should no longer be able to buy then sell at a profit. /city/houses/wizz* maps: removed ./ from start of some map paths - causes apparant problems. Lake_Country/Butakis/blacksmith - can no longer get free dragon mails or other items - have to pay for them now. Remove pup_land/rainbow/Lv4/\nkey (\n was an embedded newline). Map doesn't look to be needed. Archetype changes: Added blocksview to gwall so you can no longer see through them. Fixed up castle animation in bitmap mode (212/312 images needed to be swapped) Increased exp for skulls from 3500 to 5000, reduced exp of deathtrees from 1400 to 1000. fixed typo in gauntlets which meant title was set right. aggressive 1 values changed to unagressive 0 values in some archetypes (no such value as agressive) ------------------------------------------------------------------------------ Changes from Crossfire 0.93.7 to 0.94.0: Added outline of future versions in the TODO file. a mana storm should now hit with godpower attacktype. The spell create_food will now create food with 0 monetary value, and be marked as starting equipment, so can not be dropped. Player titles with spaces should now load properly. Updated command times for use skill, ready skill, and stay commands so when client executes them, proper amount of time is subtracted. drop_object now preserves the freeze inv/look window, which prevents slowdowns when picking up a lot of objects/dropped. Added yield to water of diamond, fixed typo for dust of frost recipe. If a recipe doesn't have a yield, recipe should still be properly generated. Hiscore savefile now stores maxgrace and seperates player title from player name. Option added to only swap out maps when MAX_OBJECTS is exceeded (MAX_OBJECTS_LWM) Changed internal definition from SOUND_EFFECTS to RPLAY_SOUND to properly reflect what it actually enables (sounds for the client are always enabled) No longer put a 'a' for single objects. Changed ring generation so rings of power can be generated. Change can_merge so that more objects are mergable, add nrof 1 to some objects. Improved set_owner which can fix getting into endless loops. Change insert_ob_in_map_simple so it doesn't call check_walk_on. fixes player being slowed way down when dropping objects on slow move space. Animations moved out of archetype and into seperate array. This is necessary for the client as it makes a unique referance number for each animations. Also, in future, this would make it easier to be able to change aminations in objects/maps. Print out level gain messages in red so they are more noticable. Change can_pick so that invisible objects can not be picked up. Change singing so you can calm a monster multiple times - you only get exp once however. Change show invisible so it only makes monsters and players visible, and not things like magic mouths and ears. Patch so that if peaceful is set, you will not attack other players even if they have attacked you. Auto apply woodsman/mountaineering benefit when in the appropriate terrain. Fix get command so it takes from a container if appropriate. shutdown and kick wizard commands added. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Client/Server changes for 0.94.0 Updated protocol version to 1010 Server debugging statements in ericserver can be enabled/disabled by define at top. Client can lock/unlock items on the server. Client can now look at spaces now. Send update of item to client when it is identified. Send update command to client from decrease_ob_nr to update players overall weight. Now send animation information to the client. Now send sound information to the client, client can send setsound to server to enable/disable sounds. Client side image caching fully supported. Added updates when picking up objects/dropping objects so that players weight and container weight is updated if necessary. Also, if object merges, make sure we then send a delete of the original object that is now gone to the client. Update object changed to send floor animations to the client. Send update when power crystal changes speed. Send update of player object after player is loaded. Change server so that only send map update and player stats once a tick - should be more efficient and equally sufficient. Added LOCKED flag to item transmission command so client can no which items are locked. Added item1 command which superceded item command - sends more informatin. Added update command to protocol, and function in server - only sends portions of an object that need to be updated. Server now properly handles repeat fire on. ------------------------------------------------------------------------------ Changes from Crossfire 0.93.6 to 0.93.7: set_god wiz command added. Changed call to 'index' to 'strchr' in commands.c - keeps with what the rest of the program does. Pupland archetypes and maps added (v1.2 of pupland distribution). Changed get_random_mon to be more random when a monster of a specific level is requested. Casting transferrance spell on another playing and having their head explode will no longet get the recipient of the spell exp - instead, the caster of the spell will get the exp for any kills. change put_a_monster function so it properly handles multi-square monsters (put_a_monster is called by summon_evil_monsters, at probably others) Changed alchemy so you no longer get exp for failed/random mixtures If a container on the ground that the player is using (ie opened) is somehow removed, update the players view to now be the ground and not the container. Player titles will now be loaded properly from save files. Can no longer sing and make the same monster unagressive multiple times. The implementation is actually borrowing the NO_STEAL flag, which means you can't steal after you sing, and after a failed steal, you can't sing and calm it down. Also, make sure that only the 'head' of a monster is sung to. Fixed up CSword_116 xpm file (too many chars on one line) Added note/option in config.h for systems lacking O_NDELAY. Fixed up some of the quests in Lake Country - can no longer just run and get the dragonbane or buy the armor with a lot of scales. New Client/Server changes: changed esrv_send_face to take the client_num instead of client_id (should be slightly more efficient). This does not affect the protocol in any way - it just makes the handling on the serverside more efficient. Changed item command to calculate objects total weight before sending it to the client (total weight = weight+carrying). This is needed because there are many times that the client does not know what is in the container and thus can not properly calculate the weight. Change server so it sends updates for the parent items that the object is being moved from/to (ie, when removing something from a sack, send an update for the sacks weight). For the client to properly handle the player being re-updated, some special handling had to be added so the inventory list would be updated and so that we don't try and add another player object (client search routine for tags didn't look at the player) Fixed server so it now properly updates the original item from which a portion of it is being dropped. Fixed bug in server handling which kept the -1 return code from a blocked socket and decreased amount to send by that - reset to zero so amount to be sent remains the same. askface and mapredraw commands added to Protocol by Phil. Changed load player function so it calls fix_player before sending initial data to client. Removed some printf/debug statements from pickup code for newcs in player.c ------------------------------------------------------------------------------ Changes from Crossfire 0.93.5 to 0.93.6: If we fail to save a map, all objects on that map should now be properly deleted from memory. Fix possible crash when score is being generated if player is on swapped out map. Default output buffer for new clients is now 64k. Partial code in place for client side image caching. Alchemy changes from Peter & Brian. Main change is that multiple recipes can be made at once. Bad grammer in messages printed out when readable object is beyond players comprehension. ethreality recipe commented out in formulae file. Some playbalance issues on maps fixed by Samuli Tursas. Internal handling of shop menus changed - instead of a list of objects, change it to an array of strings. Minor changes in porting.c to hopefully make that file compile properly on more systems. doc/experience updated with some more notes from Brian. CAN_MERGE changed from a macro in define.h to an inline function in object.c (only file it is used.). It makes it a bit clearer, and hopefully a little safer. There is an option at the top of config.h for handling of the INLINE function declaration. Possible fix so that altars should not be re-concecrated if god is set in the editor. Undead monsters can now see in the dark. Fixed bug in parse_command which would cause crashes if a socket connection entered a string with a ; in it. Increased string size in new_draw_info which prevents crashes/stack corruption when really ling strings from a socket is entered. Changed spell level/costs between invisibility and improved invis such so that the improved version is now a higher level and more sp. Now possible to steal from a creature more than once as long as character remains unseen. Each steal attempt will become harder in any case. Remove some special player checking in get_nearest_player - I think it caused some crashes, and wasn't necessary (in fact, clever players could use it to get it such that monsters would not target them.) When characters stop levitating, call check_walk_on so they will fall through pits or other applicable effects. Fixed up some archetypes which could be picked up when that should be set (trapdoor, bullet, meteor). The last 2 cases can not be picked up, but clever casting of alchemy could have nuetralized them. collect.pl will now print warning if an object has walk_on set but does not have no_pick set. Added new map from Bjoern Helfesrieder to starting town (Yarin's House) Fix in item matching code that could cause core dumps. Fixed clearinfo command so that it still works even if player is using scroll mode (only if player issues the clearinfo command - other uses of clearinfo in function won't clear in scroll mode.) Improved shop listings so they are sorted by type, then sorted by name. Fixed bug in backspacing the to the front of the first line of an extended command - it now works properly and puts you back in normal command mode (this got broken in the addition of extended line input.) Player should still be able to save if they were the wizard. However, wizard status will be stripped for save, but the fact they were a wizard will not be stripped. Imp made even wimpier by Peter M. If you set of traps, open doors, push a player, or roll a boulder, you now become visible. Change it so that when something/someone reads a scroll, only inform the other people on the map (perhaps this is still overkill?) ------------------------------------------------------------------------------ Changes from Crossfire 0.93.4 to 0.93.5: Replaced handbook make_index script with perl version. Much faster, and also fixes problem with echo command doing different things on different systems. Minor change in crossedit such that if it is not compiled with XPM support, it will give an error message if run with the -xpm option. Changed code so that experience objects no longer change stats (reverses 'fix' made in 0.92.9) Fixes problem of characters getting extra stat points from the experience objcts. Fix bug that could cause infinite recursion loop in spellpath_msg. From cameron@ripper.stl.dec.com (James Cameron) Fix bug in complex keybindings in which all the commands in the keybinding were executed that tick. Thus, if you bound a key to north;north;north;north and pressed that key, you would move 4 spaces north no matter what your speed was. It now works properly, and you move at proper speed (keybinding is copied into buffer in player structure, and removed as we go along.) Note: This buffer could also be used to hold keypresses not yet processed, but that hasn't been done yet. Added ability to enter lines longer than the info window is wide. This allows for longer keybindings or say commands. It isn't the most sophisitcated thing (the extra lines show up with a 1> and 2>, etc for the extra lines, and we just redraw the previous line if you backspace that far. After you complete the command, it does end up redrawing the entire command, which can take a few lines, which gives some confirmation on what you typed in. This feature was added to both the standard server code and the new client. Change use of tempnam to tempnam_local which we supply. Standard tempnam will look at the TMPDIR environmental variable, and use that to override any other value for the directory - this causes problems if different people runn the program and using the temporary maps accross runs. tempnam_local will not look at the TMPDIR variable, and will instead always use the value we pass it. This can be changed if we were not compiled in SECURE mode by changing the CROSSFIRE_TMPDIR environmental variable. Code was also changed so the CROSSFIRE_TMPDIR variable will not be used if compiled in SECURE mode. Fix so that you can no longer move really fast or fire really fast by using the mouse buttons in the game window. Using the mouse buttons in the game window should now result in the same speed as using the keyboard. Patches from Peter Mardahl: Dusts now cast as ability and not spells. This mean that they will not have magic as part of the attacktype. Spells that are cast on oneself now ignore direction. Thus, healing and protection potions can not be cast on something next to the player using the object. Detector object added. Similar to inventory checkers, but only periodically samples what is in the space, and doesn't look at the inventory, only objects actually on the map. Creators can now cause objects they create to inherit names. They can also periodically create items. Arch diffs: imps weakened, cold dragon spews forth cold, creator modified to have default speed 0. New FireTemple set of maps. These have been onto the Volcano in the southeast area of the continent. The maps that were there were moved to world_e2, under the crater. Gradual light/darkness code put in place. I fixed a few of the bugs that were in peters orignal version, so it works flawlessly for both server and new client. ------------------------------------------------------------------------------ Changes from Crossfire 0.93.3 to 0.93.4: Inventory checkers can now act as doors. If no_pass is set in an inventory checker, player can not move onto that space unless they meet the match requirements. Signs that are usuable only a fixed number of times added. Fix for pedestals & buttons so they are only activated once when a player moves onto a space (previously, they were being activated twice.) Fix for connected objects so that they will not be sacrificed on altars. This fixes a case where you might want to put a check_inv and altar with the same sacrifice on the same space. Before, the inventory checker would be sacrificed on the altar, causing the linked button list for inventory checker to be corrupt. Many maps updated to look better in xpm mode or just better in general. Change in crossedit so that if you set the randomitems variable for an object, it only sets the value at the head of the object, and not all parts of the object (it would be nice to allow non head parts to have this set, but I am not sure how to get what part was clicked on in the editor, since it seems the head is passed to the function.). xpmtopix.pl script added. Eventually, I hope this will replace the C version. For now, all it is good for is to verify that the XPM images are using the proper colors. Numerous XPM images were not using the proper colors (a lot were using brown, which is not an official color - see the xpm template for what is.) Cleanup of proto directive to turn __signed into signed. Also, change #if __STDC__ to #ifdef __STDC__ in proto files. Fix so it should now compile if SECURE is defined. Ability to more easily added needed libraries in crosssite.def - Extra_Libraries option added. Assume Linux has a prototype for tempnam (at least my version does.) Many objects added, and many XPM images updated/improved. Change in new CS code - don't send the version string until after we fully set up the structure. Change so crossfire will compile if SAVE_HOMEDIR is set. Reverse actions of -m8 and -m9 (Believe they were doing the wrong thing relative to the scripts and what the docs say.) Change in hiding code and detection by monsters. ------------------------------------------------------------------------------ Changes from Crossfire 0.93.2 to 0.93.3: Added a fill below function in crossedit. This make filling in backgrounds for maps much easier. Basically, it just puts whatever object you select as the bottom object of the bounding box. If the bottom object on the map matches the object being inserted, the object is not inserted. As a side effect of some code in GetMapObjectZ, if it matches the top object, it won't be inserted either. This makes things much easier to update map backgrounds for XPM mode. Hiding made easier for players. Stealing is made easier for players, but harder beyond the first item. Many image colored and perspective corrected David Sundqvist. Also, several new objects added (specialized altars, some more indoor furniture/more orientations, some sliding secret doors, and new wall types.) Barn image naming conventioned changed to follow what is considered proper. A few maps added by David (two temples in starting village, along with a mercenary recruitment building.) Also, some maps fixed to look better in XPM made. Party kill option added by Rauli Ruohonen. IT lets you see who has killed what recently in your party. Saving throw for objects cleaned up. Previously, an objects immunities/ protections were not being used correctly to determine if it made its saving throw (that is why icecubes could be destroyed by ice). It is now set up properly. Gods will no longer improve weapons that have been enchanted by other gods (Or I believe by yourself.) Fix memory overrun (1 entry) when initializing values for the images. Program will not recover properly when it attempts to load a temporary map. This means that load_temporary_map returns the map object to use, since it might change. When setting the owner of a monster, clear its ability to use skills Fix in decrease_ob_nr so it should now work on 64 bit systems. Mapguide updated with various suggestions made on the mailing list. Linux systems assumed to have at least random available (change in the config.h file.) 't' is now bound by default to 'ready_skill throw' missing demon types (imp, big_demon, Greater_Demon) added to the list of demon races. xpmtopix will print a warning if it detects and XPM file using a tab character in the color name - makes it easier to track possible image corruption. Check for power of improved weapons now in its own function. Also, we now properly check weapon power when improving one (before, you could improve it one level more than you could actually use.) When a container is applied, make sure it is a player applying it before checking for new client/server information - otherwise an invalid pointer is dereference. Complex keybindings added - thus, you can bind several commands seperated with semicolons to one key. Fix in encounter.c so if compiled with RANDOM_ENCOUNTERS, the new settings structure is used for map location. Added check fot out_of_map in various places that needed them - prevents some more core dumps. skill identifications will now look on objects on ground in addition to those in the inventory. perceive self should now tell you what god you worship. map reset times on maps (temporary maps accross multiple runs) will not be altered if there is no map reset time. ------------------------------------------------------------------------------ Changes from Crossfire 0.93.1 to 0.93.2: New argument parsing routine - we now parse arguments in phases. With this, I have moved many of the global settings into a settings structure, and allowed highscores to be displayed by class/name. The man page and -h option have also been updated. Also, all the files that could previously be specified via environmental variables can now be specified with command line options. The temporary directory can now be specified via -tmpdir command line option or CROSSFIRE_TMPDIR environmental variable. If you cast word of recall and then save before it takes effect, it will no longer corrupt the character (and will in fact take effect when you restart). Don't let players throw starting equipment. At the same time, don't mark throwable items as starting equipment - instead, just give it zero value. Fixed inscription - now properly writes scroll when passed no string instead of crashing. Artifact monsters now possible (monsters whose abilities are changed based on the artifacts file.) Top of the artifacts file has more information on this. For now, I have only set up the orc, ogre, and goblin to get special leaders. Temp maps can be reused across multiple runs. See config.h for more notes. Bug fix in inscription: If you inscribed a scroll and already had one like it in your inventory, the game would crash after they merged. Also, if you failed in inscribe a scroll, the game would also crash (object it was using to calculate experience had never been initialized). For now, I just changed it to return -10*spell level as the exp award. Items will now be merged with other items even if one has been inventory locked. This way, if you have some torches that are locked and you pick up some more, they will merge in instead of showing up seperately. Bug fix for saving throw on objects hit by cold. There could be cases where an object being processed is no longer on the map and would cause a crash. Change find_first_free_space to return -1 if there are no free spaces. Calling function should check this and then do the 'right thing'. This fixes problems with runes creating monsters on top of monsters (or below the player). Magic map cleanup. Now have magicmap field in NewFace structure. This field holds the color to use for magic map in low 4 bits, and various flags in high 4 (right now, only floor bit is used, since drawing may differ on bw systems with that value.) magicmap filed is now supported in .arc and faces file. collect.pl modified to automaticaly put magicmap into the faces file, will also copy is_floor into faces file. magicmap takes a color name. This seperation allows magic map colors to be set independant of foreground and background colors, and simplifies the code a good deal. Also, it makes new client magic map support easier. Now all the archetypes need to be updated (I have already done the armour, connect and construct directories.) Magic map for client now implemented. Definition of protocol added to Protocol file. Only limitation implementation has over direct server is it only flashes the position of the player who cast the spell. This seems perfectly reasonable to me (use color or other attribute to know where other players are.) Old client (telnet front end) changed so that it no longer requires libcross.a. save object should do a better job if it gets an object without an archetype. buffer size for LOG increased - there were cases where this buffer was not large enough and was causing crashes (sending large amounts of garbage data to the socket was one way.) Load map will now reload the original map if the temporary map is for some reason no longer around. Fix bug where randomitems may not have been properly initialized for now objects (was inside an #ifdef for CASTING_TIME) strerror_local added to porting.c. Lets up give up more reasonable error descriptions for certain errors. If an object is cursed, set its vulnerable values to its protected and immune fields, adn clear those fields. Fixes 'problems' with finding cursed rings which are not really cursed (pro fire/vuln cold rings.) If trying to switch to private colormap in XPM mode, check to see if we are successful. Fix crossedit so that if you have a map loaded and you then try to load an invalid file, it no longer crashes (now reverts back to old file) Archetype changes: Golden unicorn horn now has its own set of images. Editable field updated for the gods archetypes (they were showing up in all the menus.) living_chaos object added (need for Brian Thomas's maps.) Update the editor/picks map so that all archetypes are included in at least one of the maps. Modified the map_info script to print out unused archetype. New server: Only increase buffer size of socket if it would increase overall size. fix in skill experience calculation to use magic field properly. Alchemy spell changed. If there is a cauldron in area of effect, only do cauldron alchemy. Otherwise, do item to gold nugget conversion. Added a few more notes/thoughts to the mapguide/ ------------------------------------------------------------------------------ Changes from Crossfire 0.93.0 to 0.93.1: change race initialization functions to to fix cases where race is specified in race file but no race is specified in the arch it points to - before it would not be added to the proper race list. include handbook.ps in the standard distribution. Client server rewritten to no longer use eutl package. Other bugfixes for client server: server now properly sends delete item command to client, client now properly adds up a containers (and hence players) weight, pixmaps are now supported. Snowball spells added - these are the same idea as the fireball spells. (by peterm) Magic wall will consume several squares now. spells array (in spellist.h) updated - was missing a spell (cure blindness). splitter.pl (by peterm) added to arch/dev directory - takes a larger xpm file and splits it into 24x24 chunks. icestorm and small snowball added to possible list of starting spells. Only set minimum speed of 0.01 for players. This fixes the bug introduced in 0.93.0 where multisquare monsters moved too slow. Only print out a creature lost a spell if it is in fact a player. Only applies for casting time. fix_me command added - basically just calls the fixme function. Can be useful if you that your characters weight is for some reason incorrect. Fixed sprintf that was copying over static character data if you tried to form a party that already matched a name. Also, fixed a possible buffer overrun situation. More memory leaks fixed by Rupert Goldie - also fix to prevent orated monsters from attack themselves. New xpm images for woods and some buildings by David Sundqvist. The new buildings have a bit more texture and 3-d look, the new woods look a little bit more in scale and mesh together better. The old images are in the xpm_pref directory if you prefer those. More code added to free memory when server shuts down (useful for trying to track down some memory leaks). ------------------------------------------------------------------------------ Changes from Crossfire 0.92.9 to 0.93.0: Minor map changes: Some maps cleaned up to look better in XPM mode. Removed no magic areas from around the demilichs in lord ramsdre mansion. map_expand perl script added (located in lib/adm) Cleaned up use of externs and declarations of many structures. Depending on the linker, these would not be merged into one value, and thus not be initialized/set properly (fixes 'mark pushed you bug'). This was a problem at least on SGI systems, probably others. If on a sun and not using sun's acc, assuming Stupid Sun Headers, even if on a Solaris system. Changed change_abil so it returns true if a value actually changed (useful for printint out information when apply objects like potions.) A lot of return checking of this function in apply.c is removed - that checking now seems obsolete. Set visibility to zero at first stage initialization. Put a lower limit of 0.01 for player speed. This still gives an action every 12 seconds if you pick up way too much junk. When praying at altars, have gods grant out spells only if it is a spell they are attuned to. Cleaned up some memory leaks, courtesy of Rupert G. Goldie. Cleaned up the cast command code. Also, if you do something like 'cast p', it will now show all spells you know that start with p, instead of casting the first one it finds. Shift middle button in the inventory window should now mark an item. Fix button handling for look and message window so that only if it is clicked with the right 30 pixels do we consider it a scrollbar event (before, anything more than 270 from the left was considered scrollbar - works fine for default sizes, but if you resize, it would cause problems. If on SGI systems, don't default to using rand - it should now pick up lrand48 or random instead. Change spell casting such that if you aren't high enough level, it more obviously states it (previously it said you 'lack the skill', which can lead to confusion.) Fix so that the first recipe is now accessible when performing alchemies. Added many thoughts/ideas to the TODO list. Increase buffer size for examine command - some object could overflow the old buffer. remove no_magic from all monsters - immunity values should be used instead. am not sure Made changes for strcasecmp detect - was checking as defined(sun), now is defined(__sun__) - this is proper and what the rest of the code uses. define MAXNAMLEN in crossedit/Posix.h - needed for ultrix systems. Made it so that boots are not always considered magical (since there are now many plain boots out there.) Also, removed the always_magical function - is_magical should now handle it all. Allow items of type BOOK to be identified, since you can now find non identified readable items. Change loot_object so it doesn't remove experience objects - this way skills don't get removed when a player dies. ------------------------------------------------------------------------------ Changes from Crossfire 0.92.8 to 0.92.9: Make sure all skills are unapplied when changing the class. When generating a spell listing (cast with no options), display the level of the spell (or den if it is denied.) Also, display mage spells in one batch, priest spels in another group - I think this is more relevant now since these are seperate exp objects and draw on different power sources. Still no pause key (doing those is a real pain) - that is really a client issue or we should just add a scrollbar to the text window. Removed level 20 from artifact 'sword of Beserkgang' - was preventing characters from using it. Put cause many wounds spell in PATH_WOUNDING. Book chance for holy word increased. Let experience objects change stats. Many debugging messages added or updated to print out more useful/ detailed information. Changed usage and set_protocol function names in client/client.c. This prevents name collision with libcross. Web site locations added to the README file. Load and save window positions even if split windows is not set. This way, window posititions are lost if you run the game in non split mode (and I don't see any reason to discard these values.) Also, -split can be used in addition to -w to get split mode. Changed check inventory objects to recursively search through containers, and cleaned up the code. Also, added notes on crossfire.doc on using it, and made basic archetype to use. When using inventory checkers in crossedit, have the attributes by default come up with connected and lockcode fields. Made change to unique items: If the object is a floor and has unique items set, then all objects above and including the floor get saved as unique objects. Also, when merging maps and freeing old unique items, make sure we remove them from the button links. Made an apartment map which characters can buy permanent apartments and also store equipment in. When exiting the program, save off all maps so the unique items get written out. Xpm fixes: Moved floor setting from map loader to update_object. This makes it so that crossedit will display the map properly in XPM mode as you make updates. Also, made default visiblity 0 - this makes the double floor work properly. There still seems to be some bug when pasting objects in the editor with respect to updates. Change made to goths taverns and tavern in lake country. Change is so that some of the wimpier informants don't have really good stuff to take. Periodically write out the book archive during play, and not just when the program exits. Bug fix so 'drop x items' should no longer crash. Also, 'drop 1 item' should now only drop 1 item of 'item', and not all of 'item'. Bug fix so 'unlock item' should now work OK. When throwing objects, clear the APPLIED flag before the throw. Prayer granting from praying at altars changed around - you will get more unusual prayers, and a Wisdom of 25 is not a yes/no cutoff - value of sucess depends on wisdom. Archetype changes: remove no_magic flag from demon lord - I don't think this should be set in any monster - instead, immune should be set properly. Added damned flag to gates that are no magic (probably not necessary, but I think it makes sense.) Added check_inv object. Removed some duplicate skill types (same skill, different arch names.) Have get_pointed_target return the head of the monster if it is a multi part monster. Change smite and finger of death spell so they have no effect if creature reflects spells. Fix to prevent bug crashes with magic rune spell. Fix in spring_trap to correctly target the victim. Also, fix in find_traps which prevented the gaining of experience. If character has bonus grace, display it with percieve self. Also, load and store the last_grace value properly. Changes from Brians hide/attack patch: Adjustments for attacking based on varying factors, monsters wake up & call for help if it, can't remain hidden if you attack, changes for monster detection of hidden/dark/invisible players, players no longer remain invisible if attacking, adjustment in exp for stealing, stealing and hiding chances changed based on terrain and other modifiers, when generating flesh items, set no_steal, give chinese dragons some treasure, giants a little more gold. ------------------------------------------------------------------------------ Changes from Crossfire 0.92.7 to 0.92.8: races file changed, a bit more flexible. Additional dump flag (-m8) to dump god information. If attacktype is holyword, creature must be in slaying field of holyword. Better handling for items that remove/add protections,immunities, vulnerabilities. Only print changes if there is an actual change. holy power, blinding attacktypes added. Add poison to list of items that might not be identified. Two when windows are killed: 1) data is freed properly without causing crash now. 2) If player has saved but window is still active, will no longer make a save of the player. This save would be a no-item save that the character had been playing. Bug fix to prevent crashes if clicking a button in the message window and show_Buttons not enabled. Also, moved button handling in message window into its own function. Bug fix for pet monsters that should prevent cores if cycling through many maps very quickly. appendix for god information added to handbook (both latex and html versions.) gods2 patch applied from Brian Thomas. The main thrust of the patch is to make gods objects/archetype, and not array entries in the source code. A lot of code needed to be changed to support this difference. God patches so that game doesn't crash if no gods are set. Hopeful change for FreeBSD so it automatically pulls in the crypt library. Can no longer cast spells which are beyond your skill level. More powerful spell failures added. Can no longer read scrolls/other readable if blind. Fix bug that if a weapon had slaying, it slayed all monsters, not just the ones it was supposed to. Don't add the bows attacktype in when figuring out the attacktype of this player. This pretty much always gave the character a physical attacktype in addition to everything else. Fix 'peaceful' when using buttons so it doesn't crash the game. path_to_player changed to work better on diagonals. Spell choosing by monsters a bit more intelligent. No longer get experience for disarming/finding your own traps or those of other players. Add NO_STEAL flag, with obvious meaning. If a monster notices you stealing stuff, all his items are set to this, so nothing more can be stolen. Flag is automatically cleared when items are dropped. Add run and fire messages to message (stat bar) window. Make USE_BUTTONS playable setable item instead of compile time item. Don't insert heavy (>5 kg) missile objects into player when they hit - have them drop to the ground instead. -- Made more general object matching routines. item_matched_string sees if an object matches a string (which can be comma seperated list of many things.) find_best_object_match finds the best match in the players inventory. item_matched_string gets used for for matching multiple items. It is used in drop, get, take, lock/unlock find_best_object_match is used for apply, examine, mark, search-items. Also changed code so that certain actions are in sync with what display mode is set (mostly drop.) -- If levitating, you can now remove items from containers in your inventory (after all, they are levitation with you.) Clear is_changing flag if object is being thrown. Changes made to inscription code to work better. Changes mode to experience awarding for player skills. Fixes made to Peter Mardahl's dragonquest maps. Big Wizard, Belzebub, and Demon lord xpm versions colored. Minor bug fix to container in Thomas map. Some new archetypes/images for peterm/dragonquest maps. Make food creation spell more dynamic - food names/values no longer hard coded in. Additional demons added by Peter Mardahl Bug fix to prevent crashes with improve armor/weapon scrolls. Bug fix to prevent crossedit from crashing when exiting with edit windows open. Fix to prevent monsters from throwing certain good objects. Make sure praying over an altar only gets cleric spells. Increase saving throw array to correspond with max level. Monster hp/sp regeneration method changed some - more accurately tunable for low regeneration values. ------------------------------------------------------------------------------ Changes from Crossfire 0.92.6 to 0.92.7: Monsters now tend to be more agressive about firing spells. Several changes - now monsters will fire along diagonals. For multisquare monsters, we check to see if any part of the monster has a good shot at the player, not just the head. This changes tend to make it more likely that a monster will cast a spell and hit other monsters (makes a pack of wyverns more dangerous, as many will cast spells at you.) I am not sure if this is a bad thing - all it means is that you can't mix fire using creatures with monsters that will be damaged by fire. Let archetypes in the races file have spaces (for Arch Angel) Throwing code added - players and monsters can now throw objects. Some new throwable archetypes added. You need to add throwing_skill to any old players - you can run the utils/add_throw.perl to do this crossedit: If a object have editable of 0, make it so it doesn't appear in any of the menus. Max yield added to recipes. Better checks for insert_ob_in_ob to make sure we really have a player before calling some of the update functions. Weight limit for custom containers is now saved. If we load an object and find it has no archetype, just drop the object. This shouldn't happen, but can prevent core dumps for maps with missing objects or players from a different version. Add 5 static buffers to query_name - it is now safe to call it a few times in a sprintf or the like without losing the old value. Added 'statistics' command. Shows useful information about the character (none that can't be found in the docs.) Also changed 'skills' to show how much exp you need in each category for the next level. change_abil changed so that it only prints out what values/attributes have changed. Ie, if you remove a ring that gives protection from fire, but have other fire resistance, it won't say you are more vulnerable to file (since you are not.) Charisma bonus/mechanism changed (again.) Values in living.c are more easily/directly translated into what it means for buy/sell cost. Curve also balanced out some more. Query_cost changed so the value mechanism is a bit different (unfortunately, we need to multiply the value of objects by 4 to keep them roughly the same price as before.) Added 'mark' command. You use this to mark objects that are used for other objects (ie, torches with flint & steel, weapon with improvement scroll, etc.) This removes the necessity that the item you want to apply be the first thing in your inventory (in fact, that is no longer supported.) This should also make things easier for the client. Bug fix that prevents crashes on spaces which have a teleporter and sacrifice altar on the same space (/Lake_Country/DA). Some minor changes to lighting code, some maps also updated to use lighting code. Added halfling and half orc character to the game (From Brian Thomas) Changed valuation for FLESH items. Before it was value*level of creature. Now it is value*sqrt(level*2). For low level, this keeps roughly the same value, but for high levels, it keeps things more reasonable (drops the value of zombie corpses to about half previous value) Bug fix for monsters that have attacktype of ghosthit along with others (main fix ghasts, for Lake County, REtower/tower3, but this could happen for any monster.) Fix for attacks doing no damage against monsters they should. Bug fixes to readable code - should no longer core dump (At times) when books are created, should also be more robust and fix some other bugs. Also, give more detailed messages on how many levels beyond your comprehension a book is. randomitems now stored in object, not archetype. This means that treasure types can be changed in the map - a new archetype doesn't need to be added. However, the treasure to set must still be in the treasures file (or you can use none so treasure is not generated.) Removed color_fg and color_bg variables from game - these have long been obsoleted, but code to handle them has never been completely removed. Changed code so that best wc possible is +/-120 - should now prevent overflows. ------------------------------------------------------------------------------ Changes from Crossfire 0.92.5 to 0.92.6: If player deletes window and we can't save, delete player objects instead of dumping them on the map. Make NEW_PROCESS_EVENTS standard - remove old proces code and ifdefs. Remove temporary object from cast_spell - pass along both spellcasting and owner objects. Seems to fix some bugs and increase reliability (also is a better way to deal with it.) Change made so that converters are also knowledge about 'money' psuedotype. change spellcasting altars so they also push the button. Fixes altars on some old maps. Some minor tweaks made to the artifact file - mostly clarification of names or setting values correctly. spellcasting skill renamed to wizardry. Fix made so that 'old' potions (strength, int, etc) use correct price. If you examine food/flesh items, you now get detailed information (food value, protections, etc.) Code by brian thomas so that book titles will remain constant across different program runs. Bug fix for crashes caused by multisquare monsters stepping on deadly objects. Basically, fully insert the object, then start doing the check_walkon's one at a time to see if the creature dies. Brian Thomas' valley of the sisters quest added. Additional archetypes and treasures added to handle this. 'sort_inventory' option added (player setable.) IF set, when items are picked up, they will be inserted by type, then alphabetical. Very handy for scrolls and rings. Some fixes made to the kundi maps. Flesh/alchemy fixes by Brian Thomas. Flesh type now inherit properties from parent creature (weight, and possibly protections/vulnerabilities are added). Change made for alchemy - you can't toss a bunch of junk in a cauldron and get a good item out unless you sucessfully use alchemy. handbook added to the doc directory (tex/postscript.) And html version is also there, along with an html version to the spoiler. Tex version of spoiler also fixed so it is generated properly with new Latex. ------------------------------------------------------------------------------ Changes from Crossfire 0.92.4 to 0.92.5: Som bug fixes made dealing with cursed improvement potions. Always let players learn spells if they are in their starting spellbook. New attack methodology put in palce. To put in simply, if there is only 1 attacktype, things remain the same. If there are multiple attacktypes, we cycle through them one by one, and take the one that does the best damage and use it. Some attacktypes no longer do damage - they are effects (ie, paralyzation, slow.) In the case of of these, the effect will always be applied if appropriate. Code looks to behave pretty much the same, but is easier to follow. IF new code is buggy, or you don't want it, there is a define at the top of attack.c you can change. If god blesses you, lets actually remove the depletion object from the player inventory. Other god related fixes put in place - look to also deal with blessed weapons. Additional dump flag added. fix bugs with USE_BUTTONS and the peaceful button. Only allow write_rune to use objects of type RUNE Bugfix in get_pointed_target if it can't find a target - prevents endless loop NRSPELLPATHS set to correct value. Remove null terminator from gods array - not needed anymore. Fix savethrow array size to match maxlevel properly (was 1 short) remove damnation and remove curse now cleric spells. Fix some header code to better work on solaris 2.5 Support for compilation with the dmalloc (debug malloc) package. Allow altars and related items to match objects based on type. Use hp field of altar object as the type to match. Library patch by Brian Thomas. Various skill fixes by Brian Thomas. Alchemy patch by Brian Thomas. Here is a copy of his README: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The amount of work I put into this was substantial; other than new code -- I created new archetypes, revised archetypes, altered the treasures file and created 2 new object types and a flag. It therefore may be enjoyable to install this patch (incl code) and *not* define ALCHEMY in define.h. In particular, this patch does the following things: 1) more varieties of potions are available in shops. 2) new gems and types of food. 3) monsters will now leave behind body parts when you kill them. 4) if ALCHEMY is defined players may make potions/artifacts. I have included instructions for installation in INSTALL.PATCH, and a brief document for using the code (Alchemy.doc). Finally, as always, feedback is appreciated. b.t. thomas@astro.psu.edu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ------------------------------------------------------------------------------ Changes from Crossfire 0.92.3 to 0.92.4: Various bug fixes to readable code. Let altars be able to cast spells. sp field determine what spell to cast. Fix obscure bug that an arrow can be 'killed' if a monster that has hitback moves onto it while it is moving. Thus would then cause problems because apply would try to remove the object after it had been killed. Give quetzalcoatl melee attack skill. Give experience for clawing attacks. Include literacy skill with fighter skill - this should now give all starting classes literacy skill. I think it improves play balance. Don't mark a players starting money as being start equipment - otherwise they can't drop it on identify altars and it can get merged with money gained at a later date, yet still be marked as starting equipment. Bug fix in keybindings so that we check return of XKeysymToString to make sure we don't use a null value. Some keyboards have keys with no names, and on some systems, passing a null pointer as a string causes it to crash. ------------------------------------------------------------------------------ Changes from Crossfire 0.92.2 to 0.92.3: Removed ability to use unpaid objects for sacrifices. Changed weapon improvement code to be based on skill levels (if skills are used.) Code in place to generate hit points by average of fighter and overall level - to enable this, change the #if 0 to #if 1 at around line 1040 in common/living.c Books hack by Brian Thomas. This mainly means that when emptry books are created (or are otherwise on the map), that they will be filled with some type of information. Some (like monster/spells/gods/artifacts) are generated via the program itself. Information from a messages file that is stored in lib can also be found. Experience can be gained by reading this information. Read/write patch by Brian Thomas. This mainly encompasses the fact that players can now write messages in books, that you must be literate enough (as determined by literacy skill level) to read various books/scrolls. Scrolls are now not identified, but literacy can be used to identify them. Players can still read signs even if they are not literated (needed for game balance/ information) ------------------------------------------------------------------------------ Changes from Crossfire 0.92.1 to 0.92.2: Give artifact Gram weapon attacktype physical|confusion. Before, it was only confusion which would never actually damage anything. If a player dies in a shop, remove any unpaid items from his inventory and put them back in the map. Only applies in NOT_PERMADEATH mode. Put in better DM security - now checks for name, password, and hostname (any of those can be wildcarded out) - see the lib/dm_file for some demo. To supply a password for dm mode, just use dm with the password (ie, "'dm ") Lighting code added (with various support objects, spells, etc). No maps support this yet. Don't baptize altars if we are in the editor. Leave altars the way they are so that they will be baptized the crossfire loads the map instead. Allow the title of and object to be set from within crossedit. Allow individual players to set the inventory icon, now longer a compile time option. If we get a non critical error and do an emergency save just in case, then don't remove any information/objects. This probably fixes the disappearing inventory bug. ------------------------------------------------------------------------------ Changes from Crossfire 0.92.0 to 0.92.1: Improved altar sacrifice code (actually, any object type that calls check_altar) - treat a slaying field of 'money' as something special- don't care what form the money is in (see docs for more details) Improve identify table (in conjunction with altar code above) - now takes any type of money, won't take money if nothing needs to be identified, will identify as many things as money is dropped for (ie, drop 200 gold, it will do 10 items) In the map attributes in crossedit, you can select an option called "ShowWeakWalls". If this is selected, weak walls will be shown in a partial teardown state - makes working with some maps much easier. New client updated to support Power and Grace stats. Magic system broken into 2 forms of magic - clerical and mage (they are now seperate). Power stat also added to the game - plays into mage spellpoint (mana) total. Grace also added - used for cleric spell casting. Skill system greatly expanded - different experience types with skills associated with them (only has meaning if you are using the skill code) - thus you gain experience for certain categories as you use certain skills - see doc/skills.doc for more info Multiple gods added (via config option in config.h) - basically, different gods have different enemies, and the effects cleric spells have will depend on this. Altars are created for different gods. See doc/Multigod.doc for more information. Along with this, some new spells were added. Fix a problem of some objects falling out of sight when they shouldn't. Send delete item to client if decrease_ob reduces the items nrof to 0. Weight should now be fixed up when transferring stuff to/from containers. config option called NO_AUTO_SKILL_SWITCH added - it means range type doesn't automatically get switched to skill type when using melee weapon. Main effects is that it makes it easier to switch between melee and range weapons (pretty much makes it like it was prior to the skill code.) Sack code cleaned up - we don't need to split an object to see if it will actually fit in a container - we can just say how many we want to try to put in. Actually put wimpy command back in (all code was there, just the link to call the fucntion was missing.) Increase max count from 9999 to 99,999. Wasn't that uncommen for high level characters to have more than 10000 platinum coins. When invoking spells, temporarily switch the range type to range_magic - otherwise, a proper check for spellpoints is not done, and it then becomes possible to go negative. Modified crossloop so that it renames and compresses any core files created while it is running - very handy for debugging (note that you could easily modify it to remove the core files instead.) ------------------------------------------------------------------------------ Changes from Crossfire 0.91.9 to 0.92.0: Make sure the weight a container is carrying can never go below 0. Fixed fall below code, so that objects with visibility will not fall below objects that otherwise blocks view. Fixed colormap problems with xpm graphics on black and white displays. ALLOW_SKILLS is now the default in the config.h file. IS_SUMMON_SPELL macro fixed (= was supposed to be ==) Artifact foods added by Brian Thomas. These are foods that can give some nice benefits (stat improvements, etc), or be much nastier poisons. Bug fix made to skill selection that would otherwise cause core dumps. Bug fix made to query_cost that would cause core dumps if the alchemy spell was used. Fixed bug in dimension door that would cause core dumps if cast from a wand. find_target_for_friendly_spell fixed to use the get_owner call instead of referring to op->owner (get_owner should always be used.) Fixed core dumps that were caused when the owner would be killed, but still have a pet monster (vampires as an example.) get_owner makes checks to make sure the owner still exists. Only set the windows colormap if on a color display. ------------------------------------------------------------------------------ Changes from Crossfire 0.91.8 to 0.91.9: Changed some parameter names from spell to spellnum. Some compilers don't like parameter names that match structure names. Alot of skill code added by Brian Thomas. Assume that Suns running solaris have strncasecmp. Also, if using Xpm_Pix, assume the strcasecmp is available (the Xpm library should provide it.) get_player_ob function now uses the CALLOC define, instead of just calloc. When dropping items onto objects that blocks view, they now fall below the object that blocks the view. XPM mode now works with private colormaps. It will also switch to a private colormap if it runs out of color during the xpm creation (works for crossedit also). Don't let players put starting equipment into containers. A bows weapon class (WC) is now used to determined hit probability for arrows. When a player dies (in NOT_PERMADEATH mode), the character is immediately saved. Thus, if you die there is no advantage to crashing the server, hoping for a copy of your character from before you died. Set the value to 0 for arrows created with the create missile spell. When transferrance is cast excessively, don't hit the person receiving the spell with 9999 points of physical damage (otherwise, spell can be used to kill many powerful monsters.) Made some changes to make it compile properly under Solaris. Fixed bug in dropall that would cause an infinite loop if the player had an open container. Exits can now inflict damage on players. Fixed middle mouse button missle attack. Now clears the fire_on flag. ------------------------------------------------------------------------------ Changes from Crossfire 0.91.7 to 0.91.8: Messages about an objects speed no longer printed to the console. When players exit maps, no longer inform all the other players. install-same and install-font directives added to lib/Imakefile - used if game is being installed to same font it was unpacked in. Client now supports receiving bitmaps - server does not support sending them, however. Max experience achievable is based on max level, not a hard coded value (although, at present time, max level is hardcoded to 100) insert_ob_in_ob now returns an object - needed for client/server code. check_inv function added to button.c. Trigger will be altered depending if the character has a matching item (or lack of a matching item.) Option added to config.h to make it so that backup saves will save the player back at home, instead of the present map. Code adapated from code sent by John Steven Moerk (jsm@axon.ksc.nasa.gov) Minor bug in crossedit fixed that would cause it to exit if both -p and -xpm is specified. Both can now be specified - it will effectively ignore the -pix portion. New skills added, with corresponding code to use these skills (from Brian Thomas) Use of skill code is selectable in the config.h file. Two new spells: summon fog and steambolt (from Brian Thomas) Enchant armor code added (from Brian Thomas) Fixed bug in crossedit that would cause it to core dump whenever a non exit was selected and then the enter command run. Fixed bug in attack.c that was using info_all if CASTING_TIME was selected. Made it so that decrease_ob_nr will never decrease the object number below 0. This fixes a bug in that remove_ob would calculate a negative weight, and then call sub_weight with that negative value. This ended up resulting in weight being added to the player instead of subtracted. ------------------------------------------------------------------------------ Changes from Crossfire 0.91.6 to 0.91.7: Item saving throw changed around - items are only invulernable to attack types that they are protectected or immune to. For example, if an item is protected from magic, and is is by AT_FIRE | AT_MAGIC, it still needs to save against fire. Before, since it was protected from magic and the attack type includes magic, it would not have been affected in any way. insert_ob_in_map_simple function added. This is used in functions that what to examine all the objects on a space, yet insert new objects as it goes (polymorph). This function will not merge objects, so traversing the stack will work fine. Should fix removing removed object bugs that used to happen for polymorph (function should be used in other functions that do a similar thing) Damage field in objects is now 16 bits (signed). Needed because some high level spells would do more damage than could be stored in signed 8 bits. The 'old' client program no longer compares versions - there is no reason to, since the client doesn't do anything that requires an exact version match. Better handling of the Eutl library added - selection is now done in crosssite.def. Large lake faces expanded - now set up like walls, where auto join works. walls pick file expanded to include this image series and some other walls that were not previously set. Pacify spell added - code from Brian Thomas Show invisible and X-ray spell added (code by Peter Mardahl) Face data is static - that is to say the the color for any face can not be changed. In order to do a face with a different color, a new face needs to be created (or perhaps linked to the old). This change was made because for client/server communication, having a known color for each image greatly simplify things (also, on monochrome or XPM displays, color information didn't have any effect). Related changes: 1) color information is no longer stored in the archetypes file, but continues to be stored in the individual .arc files. collect.pl has been modified to store this information in a faces file. 2) visibility variable added. This is a face value, and it is meant to take the place of the DOUBLE_FLOOR_PATCH. System will work like this if DOUBLE_FLOOR_PATCH is enabled: the floor and the object with the highest visibility + the top object will be drawn. 3) color can not be changed in maps - in fact, since color is now stored in a different file, the color handling for objects has been removed. Note - when loading a map with crossedit, this information is silently ignored. Thus, when then saving the map, the color information will be lost. The maps should be updated with new faces if this color information is imporant. The lib/adm/map_info perl program now will print out warning messages for maps that are using color changes. Also, the code in loader.c can easily be changed to print out when it loads a color change (disabled because it is too verbose for most uses) PLAYER_COLORS config option and code support removed - with new static face information above, this can not be supported in any real way. Shop buildings no longer have is_floor set. This was a hack for the DOUBLE_FLOOR_PATCH for XPM mode. However, enabling it can make it so objects disappear beneath the shops (due to the way maps save.) Having objects not disappear is much more important (IMHO) than having things look just a little bit nicer for XPM mode. Archetypes exist for it, but are in the dev/unused/0.91/7/mood_floor directory, since no maps presently use them Mood floors added (code by thomas@nomad.astro.psu.edu). When activated, these floors can change the mode/flags of monsters (make them aggressive, make them unagressive, make them fall asleep, or charm them) New output mode in place - this uses a much smarter buffering method - it keeps track of several messages, and how often they are flushed is setable with the output-sync and output-flush commands (a help file does exist). All the various draw/write functions have been cleaned up, so that there now exists only 1 front end function (new_draw_info), which takes flags, priority, object, and the actual string. The flags are defined in newclient.h, as NDI_* (in this file because client should use the color flags sometime in the future, and it makes sense to keep all the flags in one place). Priority corresponds to the listen level that the player has set - the lower priority, the more likely it will be printed. Certain runes/traps now work properly (things like create bomb and magic draining would not work if the player is not on the same square as the rune) When a player kills a window, the players objects will be destroyed and not placed on the map. Scrolls, rods, wands, and staves will always be at least level 1. Beefed up demilich's. Previously, for the experience they were worth, it was much to easy to kill them. Main difference is that now their speed is 0.25 compared to 0.06 Fixed minor bugs with player movers - if the object to be moved had a speed greater than 1, it was possible to avoid all affects of the mover. Objects that slay are fixed up. Previously, only if the race matched the slaying type did it work. Now, in addition, f the race of archetype name matches the slaying, the object will slay. This fixes stakes, and probably a lot of other items that weren't slaying creatures properly. Changed some of the stat bonuses/penalties for all the classes. All the 'normal' races now have a net total of 0 (fireborn, wraith, and quetzalcoatl are not considered normal races, so their totals are unchanged.) Some of the items in the artifacts file have been fixed up - fixed spelling errors and errors in placement of the difficulty. ------------------------------------------------------------------------------ Changes from Crossfire 0.91.5 to 0.91.6: When player stops attacking, make sure his speed_left is not larger than his normal speed. Fixes a bug where you could attack a wall, then try to attack in another direction, and move quite quickly for a short time, since weapon speed would be used for that short burst of movement. Drain attacks become attack type physical when the character reaches the mininum experience possible. Do not allow equipped weapons to be improved if they would make it too powerful for the character to use. errmsg buffer sized increased to HUGE_BUF. Should fix some bugs that were causes when this was overflowed in dump_object2. SOUND_EFFECTS (if selected) is now defined when compiling all files. Previously, it was only set when compiling files in the server directory - this had the effect that the player structure was different between the server and common area. speed+2 items now increase speed properly. Values in the computation were not being cast to floats, so a speed+2 ended up giving the same amount of speed as a speed+1 item. Restoration changed around. The spell will no longer restore depleted stats - this can only be done with the potion. The potion is now only generic restoration - specific stat restoration potions removed. Also, perceive self will now tell the player what stats are drained and by how much. Reduce the amount of experience you get from killing other players to 1/10'th what it used to be. This should also discourage players from killing other players. SAVE_PLAYER removed from configurable options - it is always on. I can't see why anyone wouldn't want to be able to use this, and if you really don't want to use it, removing the save directory would pretty much work. Fixed dropall command. It wasn't dropping all items (seemed to stop at first locked item.) Also, 'dropall armour' now drops helmets in addition to shields and armor. Fixed heroism potion. It was casting the incorrect spell (detect curse). Now it casts heroism. Fixed bug that would cause remove object to try and remove object. When loading maps, an object in a container in a container would not be inserted (this mostly happened with an object in a chest in an icecube.) Changed code in load_objects to a recursive call, which can handle inventories any number of layers deep. Fixed bug in drop_all that would cause core dumps. ------------------------------------------------------------------------------ Changes from Crossfire 0.91.4 to 0.91.5 Inventory icons are now updated properly. Also, the inv_name and look_name arrays in the player structure have been redone - these are now arrays of function pointers and use the shared string libraries to allocated and free storage. This should take less space than the fixed size arrays that were previously used. When buying equipment, weight is now subtracted properly from the player for the coins that are used. Maps can now have a fixed reset time. This means that the map will reset after a set amount of time, no matter whether it is accessed or not. Useful for highly used maps that really need to be reset once in a while. Bug fixed in get_ob_diff. The difference array would get overflow, corrupting other data. Many core dumps were probably caused by this. Fixed bug in legal_range routine where legal_range would only check to first item of type BOW in a players inventory. This caused rotateshoottype to not list the bow entry if it was not the first bow equipped. Cloaks are not always turned into artifacts - normal cloaks can be found now. Charisma bonus changed around some more. Penalties are not quite as harsh for very ugly characters - with the change, a character will never pay more than 10 times to buy something than to sell that same item. Various functions changed around and some new ones added so things will work properly with the new client (still under developement.) Most notable changes were to common/xutil.c, with the newclient.c and newsocket.c files added. Unpaid items that are alchemied are now worth nothing. TWO_BYTES_FONT is now a standard. I can't see crossfire ever going back to having less than 256 images. free map->tmpname when it is no longer needed (before setting it to NULL). this pointer is assigned from a tempnam calls, which (on Sunos 4.1.x) uses malloc to allocate space. Note - if this is not true for you system, let me know, so I can put code in to handle this. destruction spell (from scrolls) fixed. This was actually a problem in that cast_spell was not setting the owner properly. Magic mapping improved for bw systems. This actually makes it work like it used to, with it doing stippling for object. Casting of director spells changed. Placement away from characters and underneath characters now possible New potion type added - Improvement: This will raise level hit point or spell point gain to the maximum value. It starts at the lowest level (ie, first hit/spell points gained), and will raise one value to maximum. Some patches added (From Manfred Weichel, manfred.weichel@mch.sni.de) which should make compiles on SVR4 work properly. New artifacts (in lib/artifacts file) added. Configurable option: cone attacks no longer propogate through monster - it will only hit the first row. Remove curse/damnation changed so that it will not remove curses which are a higher level than the spell caster. Polymorph code changed around. Greater chance of items being destroyed, value can never be greater than twice the original value, no mininum value. Also, now the item value and not clone value is used, so things like scrolls, wands, rods, etc should have the max price work correctly. magic is not maintained, rather, magic*4 is used as the difficulty for creating the new item, with max_magic of the new item never being greater than the magic of the old item. The number of objects remaining after a polymorph will be less than the original (10 arrows might become 8 bolts, for example.) You will no longer attack players in the group you are in by running into them. Titles now restored properly from save files (only makes a different if SET_TITLE is defined When doing a save, check the return value of fclose when writing to tmp file and the final file. If either of these writes file, use the backup file instead (previous save file is renamed as a backup file.) Should prevent problems when there are full filesystems of quotas in effect. The character will not be saved, but at least an older save file exsists instead of the character being totally gone (like before.) Patch from Laurent Wacrenier Plural names for items that have a 'of' in them is fixed/added. This mostly deal with potions (so instead of potion of dexterys, you get potions of dexterity) Patch from Laurent Wacrenier query_cost changed around so that value for very low priced items are now computed correctly. Before, the nrof of items was multiplied in very late, and various divisions (for being unidentified) were done previously. For low value items, this would result in a zero value. Zero values still result for low priced items if you only have 1 or 2 of them, but if you have 80 of them, a proper value is now generated. Code to control golems (and in fact many summoned creatures) now fixed. Help file added about golems. This also fixes a core dump that was caused when a summoned creature was around, and another scroll was used. Modified logger in common directory to no longer create a fatal error if you get too many minor errors in and the editor is what is being used. Before, occasional errors would be reported by the editor (mostly dealing with not found archetypes in maps), which would eventually cause a fatal error. This seemed erratic, because the editor never changes the tick, so loading one map might result in the fatal error because of the error total from the previous maps. Also, when using the editor, having missiong archetypes probably should not be a fatal condition. food value can be changed in artifact file. Food is mostly used to have various meanings in different objects. The artifact file has also been updated about everything that is changable, and what the values mean (ie, docs are built into the top of the file as comments) Weapons/armor no longer 'disappear' when a class that can not use such an item tries to equip a group of them. That is, if a class that could not use armor tried to equip 2 chain mails, one of the chain mails would disappear. ------------------------------------------------------------------------------ Changes from Crossfire 0.91.3 to 0.91.4 FLAG_NO_FIX_PLAYER is set before saving the player, and cleared after the player is loaded. Before, a character will full sp and hp could be save, and when reload, not be at full strength. This is because fix_player was being called during the load process, before all the characters items had been loaded and equipped. This, the maxsp and maxhp values were that of the character with no items. Artifacts can now pass the various spell paths to the newly created artifact. The values are or'd with the previous spell path values of the object. The artifact file now supports objects with name NONE. If this object is rolled up when trying to generate an artifact, then no artifact is generated. This allows for better tuning the chances of having certain artifacts, by just reducing the chance of having an artifact at all. The 'type' field of the Object in the artifact field is still required, but any other fields for the artifact object are not used. Crossedit fixed so that all the images do not appeared inversed when being used on a monochrome display. Changed common/xutil.h so that XPM mode will work on monochrome systems. In fact, XPM mode should now work on all systems, previously, the load process tried to create a pixmap 8 bits deep. If the X server did not support it, errors would result. So while playing in XPM mode on monochrome may be pointless, this allows play on systems where it may have some use. libproto.h and sproto.h only check that __STDC__ is defined. Previously, __STDC__ had to be nonzero, and not all compilers set this. Also, in global.h, if __STDC__ is not defined, return an error. Many compilers do not allow _STDC__ to be redefined. Updated changable variable in crossedit. Now the various spell paths can be set in the editor. SPEED_GAME now standard compile option, and not selectable. Having it as an option seemed to create more problems than bugs non speed game found. Crossfire man page updated. xledit.man changed to crossedit.man, to reflect the name of the program it represents. crossfire.doc updated with more information - mostly about new objects added to the game. More help files. Objects with type CREATOR were added. The objects, when applied, create other objects. Documentation in crossfire.doc. Object that cast spells (rod, scrolls, wands, and horns) now have a level associated with them. This level is used to determine at what level the spell should be cast, instead of using the owners level, which was typically used before (allows creation of super powerful wands/rods/horns, but having them be a very high level.) Bow, crossbow, bolt, and arrow code redone by Tero Haatanen. This cleans up the code, and allows for magical arrows and bolts. Race can now be changed in the artifacts file. A spell of Banishment has been added. Attacktype AT_DEATH is now more potent when if against a monster that the item also has slayign capability against. Bug fixed to prevent players from getting infinite experience for finding the same trap. Also, experience changed for disarming traps. ------------------------------------------------------------------------------ Changes from Crossfire 0.91.2 to 0.91.3 Changed artifact structure so that items with a chance greater than 255 are now possible. Object now put into icecubes when hit by a cold spell, like before. This probably got messed up in the saving throw re-write, where objects had to be either immune or protected from cold to be put in icecubes. In fact, the reverse was supposed (and now does) happen. IF an object is protected/immune from cold, it is also immune from being put in an icecbub. Fixed up is_magical and need_identify routines to handle more items. Rods, scrolls, and spellbooks are always considered magical in nature. Wands and staves are magical if they still have charges. Also, fixed up so that some of the Artifact items are now detected as being magical. If player lacks sufficient money to buy from shop, it now prints how much short he is in standard english string, (ie, 2 platinum 3 gold,etc), instead of gold.silver format (lacke 44.25 gold). Inventory drawing changed. Should be a little more efficient, and be more efficient on drawing. With auto pickup modes (that pick up more than one item), inventory will be drawn after all applicable items have been picked up, instead of after each one. Item status is printed next to item image in players inventory if SHOW_INV_ICON is selected in the config.h file. It would be nice if better imagines were designed for the status (right now, just words are printed out.) When connecting to the server, a one line welcome message is printed. Crossclient was modified to ignore this line if it starts with 'Welcome', so changing it may cause problems with crossclient. Potion of restorations are now handled by means of different archetypes and treasure lists, instead of having special code in the program to handle them. If a RUNE is found in an object inventory when free_object has been called, remove the rune instead of dropping it to the ground. This is so that traps (runes) disappear when the object they are placed on is destroyed. Doors are now trapped, and be detected & searched just like chest traps. Map difficulty can now be set in the map, and not be calculated at map load time. Crossedit has been modified so that 'Attributes' now contains a difficulty field, and if set, this will be used when loading a map (it is stored in the level field of the map). If this value is 0 (default), then the old formula for calculating the difficulty will be done. The advantage of this is that map creators can now set the difficulty of the map more to their liking, and certainly do a better job than the program can do. Pickup by value density fixed. The number of items is now taken into consideration (before it did not, so a lot of arrows would be picked up, because the total value divided by the weight of 1 arrow was greater than the pickup value.) Bug fixed in query_cost. Before, for F_TRUE value, unless the item was worth more than 10,000 sp, F_SELL value would be calculated instead of the true value. Merge several small files in common.c into one file called porting.c. porting.c contains common functions that are called by crossfire. This allows system dependent code by be in one file, instead of scattered throughout the program. -listen_port command line option added. num is the port to use for connections, instead of the default (13326) Instances when a variable name is the same as a structure name have been fixed (by changing the variable name). On some compilers, this is a problem. I can not be sure that all such cases have been fixed, as I have not found a way for gcc to create warnings in this situation. Random happenings when a spell fails due to encumbrance has been added. This option is configurable in the config.h file. Trap code added. Chests and doors can now be trapped. 'search' and 'disarm' commands added. old 'search' command was changed to 'search items' Inventory locking added. Makes it so that items can be locked in a players inventory, and will not be dropped when a 'dropall' command is issued. 'inv-lock' and 'inv-unlock' commands were also added. 'gsay' command added for party mode. Spellbooks can now have their slaying field set to the name of the spell that the spellbook is of. Debugging output disabled in crossedit. It produced copious amounts of data that has little relevance except for the developers. It can easy be turned back on by editing the crossedit/include/debug.h file. Artifact gems (worth lots of money) and amulets added. Invisible object now appear in crossedit. Fixes a problem, but now makes use of the global 'editor' variable, making it likely it won't be obsolete any time soon. Artifacts (in artifacts file) can now have nrof field that will be used to generated the number of items instead of the treasure list. If the nrof in the artifact is 0, then the standard treasure list nrof is used instead. Artifacts can now grant reflect missile and spell ability. Also, by setting stand_still, the objects will not be animated. ------------------------------------------------------------------------------ Changes from Crossfire 0.91.1 to 0.91.2 Some options now standard part of game (SHOP_LISTINGS, Line of Sight). The config.h (for this release) contains these options, but they are commented out with the note they no longer do anything. Changed value pickup to pick up things based on true value, and not sell value. True value is how much the item is worth without applying charisma bonuses. Before, if two different characters used the same pickup mode, different stuff could be picked up because of charisma differences (or even if a character gained charisma, the same pickup mode may not work as it did before). By using true value, pickup mode operates the same between all characters, Items of type TREASURE can now have their experience set, and this will be used for the difficulty of the generated treasure instead of the map difficulty (as was done with shops). If experience is not set, then the map difficulty will instead be used (or 14 in the case of shop floors). Cure poison actually cures it, instead of reducing the duration. Don't use fseek when loading in map files. Some systems do not support fseek on pipes (which are used for compressed files). Instead, just set the variable with the data we read, instead of seeking back and re-reading it. Transferrance spell changed so that supercharging will have bad effects (first confuses the player, then a large fireball is created (with player losing all spellpoints) Poisoning made more vicious - it does more damage based on the level of the creature that uses it (level/2 in fact). This makes it so that very tough creatures that poison someone will have the poison do serious damage. Also, damage caused is no longer random. Chests can now contain multiple items. Code changed to handle this properly. Treasure is also always dropped on the floor (Even if the chest is in an objects inventory.) hp field used in chests (and in fact all treasures) to determine how many objects to create (thus, a chest with 3 hp will have 3 objects created). Crossedit now draws a rectangle around the selected area. Reversing the color of the images did not work in XPM mode. Have client.c include "includes.h". includes.h sets up all the name defines properly (ie, __sgi__, __sun__) SP_* functions changed (by Rupert Goldie) to take an object pointer instead of a level value. This makes adjustments for spell costs (via stuff like spell paths) easier to make, because now only the SP_* functions need to be changed. With the object structure, checking for known paths (or perhaps other things in the future) can easily be done. Bombs will now be dropped before exploding. New attack type (God Power) added. The cleric cause wound spells use this attack type. Charm monster spell added. Party system re-written by Scott MacFiggen . Characters will now only share experience if on the same map, and other features were also added. Modified check_item function (used in creating weapons with the improve scrolls). The objects being sacrificed do not need to be in one group (ie, two groups of 4 potions of dex will now be counted as 8 potions). This only applies to potions, since some can be identified and others not identified. Also, cursed or damned items will not count towards sacrifice count (although, they will be consumed). Changed way cancellation works on items. Before, if cancellation hit a player and the player failed the saving throws, the items got no saving throw versus cancellation (only if their absolute magic value was less than RANDOM()%6 did they survive). Now each item gets a saving throw. Note that if a container makes a saving throw, then the items inside do not need to make saving throws and are unaffected. A separate function did_make_save_item was split off from save_throw_object. did_make_save_item justs checks to see if the item made its saving throw based on the tables (and any protections or immunities grants it an automatic save, as before) save_throw_item calls this function, and in addition, does the appropriate actions (burns up items, turns them into icecubes, calls cancellation, etc.) Saving throw method changed. Before, each item got 5 chances to make a save for each item it is composed of. Now, it gets one chance for material it is composed of. Then, based on the number of saves it made, and the number materials it is composed of, an overall made save/failed save is determined. This change is to make it easier to figure out saving throw values, and hopefully make adjustment easier. Saving throw tables updated. In general, each item is +5 compared to what it was before. This should hopefully make it so that items have about the same success rate they did before. Crossedit modified to preserve value of connected field when cut/copying and pasting. Before, an object that was copied/cut would also have its connected field reset to 0. More XPM images colored. Filenames for the river directory have been re-done, to actually make it a bit clearer of what does what. The archetype names were not renamed however, to keep compatibility. World expanded. Another row of maps was added to the southern edge. The world maps were also renamed to a world_xy format, where x is a letter and y is a number. This represents the x and y location of the map, making it easier to figure out how maps related to each other. Map spaces can prevent magic user spells, cleric spells, or both. Before, an anti magic square prevented all types of spell casting. Have monsters regenerate spell points even if they don't cast a spell. Monsters have a 1:3 chance of casting spells, irregardless of any other factors. Before, spellpoints would only be regenerated if it got past this check. Also, some monsters (dragons, chinese dragons) have had their max spellpoint and regeneration rates increased to correspond with the higher cost of casting their breath weapons. Altars now will also match on the slaying field of the object being sacrificed. This is similar to how keys and special doors work. With this change, it is no longer required to make a unique item that then needs to be sacrificed (ie, the dagger, the cup, and the crown for the old city quests). Instead, a cup, and crown can be used, with the slaying field set appropriately (unfortunately, will not work for weapons, as it will think that is the monster to do extra damage against.) However, the altar code always did match item name, so calling it something special like 'The Dagger' and have the sacrifice look for that should also work. Spell encumbrance code added. More you are carrying the higher your chance for failure. ------------------------------------------------------------------------------ Changes from Crossfire 0.91.0 to 0.91.1: Fixed bug in the enchant weapon code. It was not allocing enough space for the string, and thus would corrupt the heap. Minor fix to spells.c. IT was using strdup instead of strdup_local, which caused the compile to fail on some machines. No longer gets errors when adding a player on a map that is not loaded in a multi player game. Before, process_events would see that the player has no object, and could get enough errors to cause the game to quit. Now, it suppresses errors if it is only loading objects for that map. Default map difficult for treasure that is created in shops was changed from 9 to 5. In this way, the likelihood is higher that good items will be found in dungeons, not in the shops (there are very few items with difficulty above 9) Archetypes cleaned up. All archetypes that were not being used in a map were moved to dev/unused/0.91.1. Note: There are still a few archetypes that are not used in any maps, but these are part of a collection (ie, one section type of a wall). This was done really because there is no reason to have archetypes that are not being used to be in the official distribution. It could be misleading for people looking through the arch directory (ie, 'I thought I looked at all the maps, but never saw this monster'). Also, I have no problem moving these archetypes back in, once some maps actually use them. 'grass' and 'sea' are no longer animated. There are a few reasons for this: 1) The animations never really were that interesting, 2) being animated put them on the speed list, and being that over all, they are the second and third most used objects, this is a performance hit, and 3) With pixmap and xpm images, re-draws are only done on squared the have changed (really improves performance). However, with them being animated, they often changed, so that more re-draws were needed. The old archetype and image files are in dev/old (in arch distribution) if you actually want to use the animated versions. Put a limit of 70 on damage bonus for weapons. Treasure lists expanded. The old treasure lists (in treasure.c) have been removed, and treasure lists added to the treasures file added to take their place. The treasure file has been expanded have list transitions, and treasure lists in which 1 object on that list will be generated. Archetypes (shop, random, and chest) updated to use the randomitems field to determine what treasure list to use to generate the items. Advantages of the new method: Ability to better tune treasure probabilities, re-compiling not necessary in order to update treasures. the create_treasure function was modified to add an extra argument - this is used to keep track of how many times it has been called on this attempt to create a treasure. In this way, infinite loops (with list transitions) are avoided. Generate treasure replaced with a simpler function that calls create_treasure, and returns the object. create_treasure takes a treasurelist instead of a integer treasurelist number, like it did before. The crossfire.doc file has been updated about the new treasures file capabilities. Chests are now created with their treasure as their inventory (this mostly happened because of the treasure changes above). Advantage is that when a chest burns up, its treasure may remain (or may be burned up). Before, when a chest was burned up, its treasure inside was not created. Rolling multi-part objects should now work better (not perfect, however). Carrying an open bag with a mode that picks everything up will no longer cause an infinite loop. Crossedit changed to draw selected areas as a black box. Fixes some problems with display in XPM mode. Fixed bug that would cause game to crash when pets were summoned. Problem was an infinite recursive loop, that would then cause the system to run out of stack space. Solution is to decrease the speed_left of the object before one of the function calls. This makes it so that at some point, one of the functions will not be called. When a rune is cast, use the s->archname for the archetype name, and not hard coded strings. Cured a bug with rune of transference. Also, allowed several case statements to be merged. Really, no archetype names should be used in spells.c, when casting spells. The archetype name should be gotten from the spell structure. If a button is being updated on a map that is being saved, just return from the function. Prevents errors 'object has speed but is free' Fixed bug that caused objects that got a speed_left of exactly 0 to be frozen. This was because speed_left >0 to have the object be processed, and <0 to have speed added. Now, speed is added if speed_left <=0. Some minor changes made to hopefully make it compile on AIX systems without any modifications. process_active_maps now called when a map is being loaded. It should hopefully work properly, since enter_exit was modified to not use any static variables. Also, process_events was modified to take a map as an argument, and if non null, only update objects on that map. That makes process_map obsolete. process_active_maps was also changed to still process even if there is only one player. Crossfire should let players still perform actions when a map is being saved. Problem is, handling a map that is in the process of it being saved, and having a character enter it. Crossfire needs to finish saving that map, then re-load it and insert the character. Large changes to how player interact with loading & saving of maps would probably be needed, and probably should be done. You no longer lose luck if you kill yourself, and the player who kills another player now loses the luck (before, the player killed would lose luck). Now inventory display modes - unpaid, cursed, magical, nonmagical. All pretty self explanatory. ------------------------------------------------------------------------------ Changes from Crossfire 0.90.5 to 0.91.0: Some new maps added to the standard distribution (Magara and some of the esben maps). Magara was added as a place to depart to by ship, the esben maps were merged in as new buildings or towers on existing maps, not as a new continent. Keyboard buffering is now selectable via 'keyboard' command. Before, an attempt to remove keystrokes from the X Events queue was made, but could not always remove all of them. Now, it should remove all of them, or none of them, depending on the keyboard buffer setting. The value will be saved with the player. Pickup mode value now saved and restored from the characters save files. Inventory and look window should only be re-drawn once when selling an item. Calls to draw_stats in common/living.c will only be made if the object type is a player (should prevent some warning messages) Fixed create earth wall spell so that it uses bdur as the base hit points of the wall (instead of bdam). This will prevent some core dumps, because otherwise, the wall can have 0 hit points. Program should not core dump when person quits that game and the map he is on has been swapped out. (ie, person saves or quits the character, but the map gets swapped out before they type 'q' to the play again question) Word activated teleporter code added (Peter Mardahl). Who can become DM, based on their user id, can now be set in the dm_file (assumed to be in lib.) (Tyler Van Gorder) Tell should now work properly (Eric Mehlhaff) Cloak code added (Peter Mardahl) Objects can not grant invisibility, make_invisible variable added to archetype files. Added information to the crossfire.doc file (was missing several attack types and materials). Added better information on what some of the flags do. Noticed that will_apply 4 applied for both scrolls and earthwalls, now only applies to earthwalls. To have a monster use scrolls, can_use_scroll should be used instead. Code added to deny users or sites from connecting. This is to prevent users who intentionally crash the server to connect and start up a window, which they then crash the server with. Patches from Tyler Van Gorder. Two floors will can now be drawn when using XPM mode and this options has been selected in config.h This allows for towers to sit on top of grass to look proper. From Gregor Schmid Patches that modified 'create food' spell. Better food (ie, waybread) will be created at higher levels, and the caster can also specify what type of food to be created. From Peter Mardahl. Spell paths added by Rupert G. Goldie . Simply put, each 'spell path' contains a certain category of spells. Objects and races can be attuned, repelled, or denied certain paths (objects would apply the the person wearing them). Attuned allows casting of spells in that path at lower cost and greater efficiency, repelled paths are cast at a higher cost and lower efficiency, and denied paths can not be cast at all. Thus, a wand of small fireball that is attuned to Fire would cast more powerful fireballs. A character wearing a ring that is denied the path of fire could not cast fire spells at all. Right now, no items will be created using these features, and no characters have any of these, but these might be added in the future. Look at the spell-paths file in the doc directory for a little more information. Pickup mode 6 (pick up magical items) will not pick up known cursed items. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Object structure and process_events changed. Now, a separate list us used to keep track of active objects (objects whose speed is nonzero). All objects on the active list are still on the normal list, but process_objects only needs to go through the active_list for objects to process, saving a lot of time. The cost is adding two pointers (active_next and active_prev) to each objects. But the speed gains are well worth the minor memory cost. the 'malloc command was changed to display the number of objects on the active list - note that there is zero memory usage for these, since these objects are also on the normal object list. Programming note: Any time an objects speed is changed (doesn't happen too often), a call to update_ob_speed(object *) must be made, so that the object can be added or removed from the active list, as appropriate. In testing, I first ran crossfire, with process events using the normal object list, and printing out error messages if it found objects that had speed but were not in the active_list. I cleared out a couple warehouses in Navar without any errors. Then, I switched to using the active_list, and printing out errors if it found objects on that list with zero speed. I cleared out the mages tower in Navar city without any errors. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Selling items now works properly (it only failed to work if AUTO_SAVE was not set previously, and the value of the item was beyond a certain amount.) Look window code changed so that it does not erase the unused area unless necessary. Also, when a player moves, freeze_look is set. This was changed because the functions that move_ob calls update the look window, and the window was being updated 3 times each time the player moved. When poisoning ends, it no longer core dumps. Inventory window updated if reading an unidentified spell book and you already know that spell. Casting rune spells now works properly. Spells now (once again) sorted upon loading of characters. ------------------------------------------------------------------------------ Changes from Crossfire 0.90.4 to 0.90.5: Bug fixed with window titles getting their names changed. (Tero Haatanen) Container code changed around. Containers can be locked, they can be used from the ground. FLAG_CONTAINER removed, since there is already a type container, and bonus removed from object structure (Tero Haatanen) insert_ob_in_ob sorts objects, so items with more magic are before those with no magic bonuses even for unidentified. It also uses the absolute value of the magic, so it should be a little more difficult to know if the item is cursed or not. Added unique-flag and UNIQUE_ITEMS define. All items which have unique flag are saved to directory .../lib/unique-items. A filename is mapname + ".v" + number, where number is normally 01, but if two or more server is running same time it can be also greater. This feature can be used to banks and inns to save permanently items. The code is one limitation: if map contains unique item which can be carried away from map (e.g. an unique excalibur) there must be at least one unique item on map which can't be carried away. This is because unique items are loaded from original map only if unique items file doesn't exit. If all unique items are carried away from map then they are loaded back next time when someone enters that map. This should not a problem if map makers remembers this. (Tero Haatanen) Editor by Jarkko Sonninen. He added toggle button into attribute window and made map's reset time and timeout so that they can be configured in maps. He also fixed map archetype, so that map default stating coordinate is (2,2) like before. This seems break a gatehouse map, where it use default value on map (changed 0 to 2), but it's easy to fix. Change check_walk_on (common/object.c) so it no longer calls the draw_func. This eliminates a problem of seeing flashes of areas that should be blocked. This is because the draw function it called would re-draw the game window before the variable to re-calculate line of set was set. As I see it, this function call was not needed in any case, because this is called during the players movement. After the player moves, the draw function is called from the process_events (now process_players1) function. This should also conserver a little cpu time, and bandwidth. Coin code in shop.c changed. Patch from Kjetil Torgrim Homme made it so that coin value can be changed in archetypes and the shop code should still work properly. I made changes so that the number of coin types is set with a #define, making adding new coin types easier. AUTOSAVE, SAVE_INTERVAL, and NO_EMERGENCY_SAVE should now work properly. See include/config.h for more information on these options. Changed it so that updates to other maps will not be performed while loading a map. This caused a bug if two players entered exits at the same time. One or both of the players may end up in incorrect locations, all exits in that location may be closed, etc. Saving throw table expanded to handle all materials and attack types (Peter Mardahl) Fixes so that Turn Undead does not do physical damage (Peter Mardahl) Patch to make it impossible to prepare multiple weapons at the same time (Peter Mardahl) Added 'sea1' archetype. This is the same as the sea archetype, but allows for walk on. Its purpose is to use for backgrounds behind boats and similar objects. Because it will probably be needed in so many places, I decided to make an archetype, instead of editing the variables inside crossedit for the object. Removed xbm_values array. This was used to map a face number to that face location in memory. Since the bmaps file is created automatically without any holes, this is not longer necessary. Archetype for wonder spell now in place. This will prevent core dumps when the spell is cast. Pixmaps will now be freed upon exiting Crossfire. They will also be freed after emergency saves are performed. This fixes the problem that some X-Terminals would not free the memory used the the pixmaps otherwise, and run out of memory. This fix pertains to both -pix and -xpm mode. Patch to hopefully double death problem/core dumps with NOT_PERMADEATH mode. Changed the size of the temporary string that is used when loading messages. For a few very long messages, 1024 bytes was not enought. Patches put in Crossedit to allow for XPM mode. From Petri Heinil. Cleaned up the code for look window. Now, everything agrees (ie, when you click on something in the look window, it is actually that object.) Likewise, invisible objects are not displayed anywhere. This should also fix a bug of not being able to enter some building by clicking the middle mouse button on them. Added help file for pickup. Explains the 8 basic pickup modes plus the value-density pickup mode. Detect magic will detect magic on all items in a stack, not just the top object. Spells fixes (From Peter Mardahl): 1) Identify modified to identify items on the ground if inventory is identified. 2) Detect magic spell finds magical runes and makes them more visible 3) AT_CHAOS and AT_COUNTERSPELL reimplemented so that they are not treated as special cases by the move_cone function 4) Magical walls created by spells (firewall, frostwall, ....) are fixed If a map is reset, that map is then removed from the list of map objects (what you see when you type 'maps ). This way, the 'maps commands only displays maps that are reasonably active. This change should also save a little memory. make depend now descends into crossedit/Cnv to depend there. Changed some of the colors in the xutil.c file. This is so that it uses the same colors as the official colors for XPM files. It would have been better to make those colors part of the official XPM colors to start with, but it is a bit late to do that now. The change of the xutil.c file was made so that crossfire would not use quite as many entries in the colormap. The change in colors should be quite minor. Two new pickup modes added - one picks up all money and gems, the other all magical items. Removed a lot of dead code from the various header files. removed hiscore.h from distribution (wasn't declaring anything that was not being declared elsewhere.) ------------------------------------------------------------------------------ Changes from Crossfire 0.90.3 to 0.90.4: Many more XPM images now properly colored. NOTE TO COLORERS: A few minor changes have been to the xpm.template file (palegreen has been replaced with green3, and a more medium orange has been added.) I replaced palegreen because it was very close to the 'green' color already present. And a medium green was lacking. A medium orange was also lacking, so I added one in. New pickup modes, that can be based on value density (from Peter Mardahl ) Spells now have a casting time. (From Matthew Zeher ) Added libproto1.h file. This will be used for function prototypes are affected by certain settings (ie, SPEED_GAME). This way, people should not need to run 'make proto' New XPM loading method. Creates montage of the xpm files, so that not as many calls to XPM are needed. This has reduced loading time to about 30% of what it was before. Note: This done mean it takes some more memory at start up, as the montage has to be stored temporarily. Changed charisma bonuses. At 30 charisma, it will no longer be possible to buy an item, and then sell it for more than you bought it for. Graphic exposures turned off on the GC's that are used in the game window. Should improve performance. When a raise stat spell ends, the proper message (ie, You look ugly, you feel less intelligent, etc) will now be printed out. If player NOT_PERMADEATH mode, and you die, a stat will only be decreased one. Before, that stat was decreased one, and the max stat was set to that value. So if the player was poisoned, or a stat was lowered due to some other reason, that loss would become permanent. Now, both the stat and orig_stat only gets decreased by one. invoke.c removed, cast_spell modified to handle what invoke.c did. Keep old shoot type if reading a scroll, instead of it being set to none. Raise stats spells should be progressively more costly (From Peter Mardahl) Should now be able to handle broken pipes without problem (ie, telnet session closing unexpectedly). Made it so that listen level 0 on a socket means that draw_all_sockets will not write to that socket. Crossclient uses this so that it does not get unexpected messages, and thinks that it failed. Added 'set font' option. This basically unsets color pixmaps or xpm mode. If crossclient was run without -xpm or -pix mode, it will send this command to use fonts. What this means is that set (font,pix,xpm) should set that display mode. Before, the display selection it defaulted to for crossclient seemed unreliable at best. Fixed memory allocation problem in commands.c (it was writing to more bytes than it had allocated) Draw message window almost complete re-written. In an effort to cut down on flashing of the the status bars. ( Niilo Neuvo ) More bug fixes for spells (from Peter Mardahl) Fixed some bugs for compiling on the Alpha running OSF/1 1.3 ------------------------------------------------------------------------------ Changes from Crossfire 0.90.2 to 0.90.3: Added -xpm command line option to crossclient. All spells should not be handled in the switch statement in spells.c Let players buy zero value items from shop. This really shouldn't be a problem, the only zero value items of any use might be wands with very few charges. If someone wants to buy poison or cursed items, they should be able to. Fix spelling error of command line argument 'detatch'. It is now spelled properly (detach). Change draw_color_pix in server/xio.c. It now draws the images to an intermediate pixmap, and then draws that to the screen. May or may not be quicker (XSetClipOrigin only needs to be set once), but it does prevent flicker. Also add two more GC's to the player struct, to make these operations faster. Unless XPM_PIX is defined, draw_color_pix will note be compiled in the code. Fixes to make it compile on both Solaris and NeXT machines (hopefully) Removed PLAYER_COLOR #ifdefs and lines they control out of login.c. Those were not needed any more. Added 'mapinfo' command to valid input commands. Only have crossfire display -m as a valid command if it was compiled with DUMP_SWITCHES set. Changed install procedure to only copy those files necessary to playing into lib. Also, don't install obsolete scripts into the bin directory when installing. ----------------------------------------------------------------------------- Changes from Crossfire 0.90.1 to 0.90.2: Cleaned up the display from 'maps. Now things line up nicely. It doesn't print the name anymore, and truncates the path at 18 characters. But this doesn't make a difference for most maps, and now you can actually see what variables are set to what. Experience requirements changed. Initial values from Peter, but I changed them to be more round numbers. Change targets in server and crossclient from ComplexProgramTarget to AllTarget, DependTarget, and NormalProgramTarget. This is because ComplexProgramTarget expects man pages in those directories, which do not exist. Moved data initialization out of treasure.h and into common/treasure.h. In theory, no data initialization should be done in the .h files, it should all be done in the .c files, with the .h files declaring the appropriate externs. Likewise, no .c files should have extern's for other data functions, they should include the appropriate .h file to get those externs declared. This would fix the problem of having to go through the various .c files whenever one of the data structures change, to update all the externs made to it. Since the compiler will check to make sure that the extern in the .h file and the actual declaration in the .c file are the same, it prevents errors of mismatched declarations (ie, having something like char s[40][20], which at later point gets to char *s[40], but some files still think it is supposed to be s[40][20].) Changed doc/Imakefile so that make install.man will actually install the man pages. Characters that dies who were poisoned should have the poisoning removed. Changes from the Berkeley Folks: What we've done that's in this server code that I know of: --level dependency added to many spells. --level dependency tunable on the fly by editing the spell_params in the 'lib' dir and using the dm command 'spellreset' spellpoints and spell level are also changeable on the fly. --many new spells added --protection spells can now superimpose, as can gain stat spells. repeated applications of protective or stat spells yield diminishing returns. --runes added--an implementation of magical traps. any spell may go in a rune. Read the documentation. --new spell interface. invoke invokes that spell immediately. Some spells can take parameters now. invoke magic rune will store in a magic rune. invoke will not set the range spell. cast and prepare are synonymous. --Certain spells cannot be set as range spells now--less than 10 of these. These are spells which no one would want to use more than once in a while, like magic map. --A hack to object.c in common dir which makes objects created by objects with owners owned by the creating object's owner. (This allows players to get credit for a kill with the meteor swarm spell, which creates a 'swarm' object, which in turn creates the meteor objects.) -- End of Berkeley additions. New maps and archetypes added. Crossedit can now load maps that are compressed. Add Solaris 2.x compile support. Now prints out what the scroll name was that turned to dust. Minor artifact changes (ring of ice is blue, ring of fire is red) Horn range weapon now works properly, via using the + and - keys. New input method (From Jari Vanhala ). Looks like it should now be possible to define keys to do most every command. Made a few minor changes to default key file to make the present set up act like the previous one. Fixed triggers and magic mouth. These devices will now open gates as would be expected. The problem was that the opening routine expects to see the op->value of these to be one, in order to open the gate or whatever. Changed routines to toggle value between 0 and 1. Note: As I understand, trigger handles return to their original state, but keep the same value. That is, you pull the trigger handle, the handle returns to its original position, but gate opens. Pull handle again, handle returns to same position, but gate now closes. Or at least that is how I implemented the devices. Make some more changes to the is_magical routine. Hopefully, it will now detect all rings and amulets that are magical. Also, it should not detect monsters (or any living object) as magical. Fixed bug with Color Pixmaps (XPM). Would try to free the pl->pixmaps area twice, causing core dump. Looks like the same thing should have happened when using bitmaps also. In any case, only one free(pl->pixmaps) is now performed. Bug fixed with XPM code, in which 'floors' would appear to be carried around with the player. This is because the players pixmap did not change, and hence, it did not update that square. Now fixed. Random encounter bug might now be fixed (patches from Frank) New FLAG method used. flags in the object structure is now an array, and SET_FLAG, CLEAR_FLAG and QUERY_FLAG functions are now used. This reduced a lot of code in common/loader.c Fixed bug in common/object.c in expand_objects function. Looks like braces were missing from for statement, so the the prev and flag fields of the new objects were not being set properly. Fixed bug that could cause core dump if trying to print map message when no message existed. (From Tero Haatanen ) Starting character will have uncursed, undamned and identified items at the start of the game. (From Tero Haatanen ) ----------------------------------------------------------------------------- Changes from Crossfire 0.90.0 to 0.90.1: Crossedit 0.7 was merged in with the 0.90.0 source. This once again creates a common distribution. I tried to retain the best features of both programs. This means that the artifact code, and cursed/uncursed items (from CF 0.90.0) remain. But I also used the filepaths for fonts, elimination of omaps for internals use, and creation of partially processed bitmap file for bitmap reading. The general patch method was to keep the cf 0.90.0, and create a diff file for crossedit 0.7 from crossfire 0.89.3. These patches were then applied. Many had to be implemented by hand. There are some exceptions. The crossedit program is almost the exact same thing as in the crossedit 0.7 distribution. I made a few minor changes to clean up compiling, but otherwise, no serious changes were made. The archetypes (lib/arch) structure was also taken from crossedit 0.7, as well as most of the archetypes themselves. I think the breakdown makes things much easier to handle for changes or improvements. NOTE: it is likely that directory (lib/arch) will not be in the standard distribution, but will instead be a separate file (to keep the size down). The various files (archetypes, bmaps, font, etc.) will be created for the distribution. All new archetypes from cf 0.90.0 were merged into the structure, as well as a few minor changes in the old archetypes I noticed. The maps are from the crossfire 0.90.0-a-maps distribution. A few simple programs (in lib/adm) were used convert them to use fontpaths and to change some monster names that conflicted with character classes. Note: Because in the old format, a 'food' field was used to determine the map to link to, it is possible some of these fields were changed when they were not supposed to be. This is because some other archetypes (altars for one) also use the food field. If you notice any converted by mistake, please let me know. A few minor memory leaks and other patches have also been applied. Other specific changes to this version: 'set' now gives better help message (like what can be set.) XPM code added. Fixed bug in 'who', which would cause a core dump if done when another playing was still creating their character. 'who' also display the map path of the other players, and not the map name. Map names seldom seem to be set. The crossfire.cfb and crossfire.pix files (in lib) can be compressed. Fixed bug that caused core dumps when pet monsters were summoned. If restoring a saved game, and the map it was saved on does not exist, start them on the standard starting level. Added option in config.h, that allows full ring and amulet descriptions to be printed in inventory and look window. Hopefully fixed bug which caused game to dump core when player died, if NOT_PERMADEATH was set on. Add flag HAS_MAGIC, and use that for the detect magic spell. This way, artifacts that have no magic, will still be shown as magical. So will rings that change abilities, etc. Doesn't work quite perfectly, but seems to work as well as the old method. Fixed bug so that if it can not find a map, it just prints that that exit is closed, instead of panicing. Have it re-draw the look window when you middle click on something (ie apply) in that window. This fixes a bug with bags/sacks, of it not updating when an item is used directly from a sack.