Mailing Lists
What's New
SlashMUD Logo Logo


$Header: /cvsroot/slashmud/slashmudx/NEWS,v 1.68 2008/04/09 00:39:20 koryn Exp $

Previous changes, most recent first:

   98379  235548 2473524 total
Auto-incrementing build number to 3195.
*      112 FIXMEs remaining in src/.
*       31 TODOs remaining in src/.
*        6 FIXMEs remaining in plugins/.
*      152 TODOs remaining in plugins/.

* [SELFTEST] Tweaked output to display results of all tests after the selftest has finished.


   98390  235545 2473879 total
Auto-incrementing build number to 3182.
*      112 FIXMEs remaining in src/.
*       31 TODOs remaining in src/.
*        6 FIXMEs remaining in plugins/.
*      152 TODOs remaining in plugins/.

* [FEATURE] Added "--launchd" commandline flag.  This overrides the --background/--daemon and --world-directory flags,
since launchd-aware processes shouldn't daemonize themselves and should set the working directory in the plist file.

* [FEATURE] Completed code for projectile weapons.

* [INTERNAL] Updated standard_library_display_accesses() so that it only displays non-zero access counts.  This slightly
reduces the verbosity of the output.

* [SELFTEST] Completed basic/reloading/firing self-tests for projectile weapons.


   97872  234091 2458786 total
Auto-incrementing build number to 3139.
*      112 FIXMEs remaining in src/.
*       28 TODOs remaining in src/.
*        9 FIXMEs remaining in plugins/.
*      151 TODOs remaining in plugins/.

* [BUGFIX] Fix paths for the wandering monsters (referenced non-existent room 'n_4').

* [FEATURE] Move test objects/areas/skills to the Testing module.

* [FEATURE] Update debug attachment and test C plugin thing to generate to the Modules/Testing/Plugins directory.

* [FEATURE] Add --map-world option to server that generates a dot (ie Graphviz) format file for visualizing the world.


   97742  233883 2456860 total
Auto-incrementing build number to 3112.
*      112 FIXMEs remaining in src/.
*       28 TODOs remaining in src/.
*        9 FIXMEs remaining in plugins/.
*      140 TODOs remaining in plugins/.

* [BUGFIX] (Neil) Restore command didn't clear the recuperation flags.
	=> now done as part of the 'hitpoints' restore command.

* [BUGFIX] (Neil)

	I somehow got into a loop where the output to the player was:
		"You slip into a coma!"
	It would not stop so I closed the terminal window and received the following:
	src/base_object.c             ,  115, DEBUG   :  
	(do_display_event_queue) Neil3 (20): Event queue after insertion:
	src/base_object.c             ,  101, DEBUG   :  
	(display_event_queue)     [1] Breathe active tick = 4885
	src/base_object.c             ,  101, DEBUG   :  
	(display_event_queue)     [2] Update active tick = 4891
	src/base_object.c             ,  101, DEBUG   :  
	(display_event_queue)     [3] Save active tick = 10116
	src/base_object.c             ,  101, DEBUG   :  
	(display_event_queue)     [4] Heal active tick = 4917
	src/spirit.c                  ,  105, DEBUG   :  
	(spirit_internal_send_line) You slip into a coma!

	=> Should be fixed...

* [FEATURE] Finished ammunition and ammobox objects.

* [FEATURE] Split selftests into correctness tests and stress tests.  Added '--stresstest' commandline option.

* [FEATURE] Add a 'Modules' directory, which contains subfolders each with Areas, Plugins, ObjectLibrary etc.


* [FEATURE] Added world settings for recuperation time ("recuperation-seconds") and maximum recuperation time


   97210  232279 2439286 total
Auto-incrementing build number to 3061.
*      112 FIXMEs remaining in src/.
*       27 TODOs remaining in src/.
*        9 FIXMEs remaining in plugins/.
*      157 TODOs remaining in plugins/.

* [BUGFIX] Nonexistent rooms no longer cause the agent 'lookall' command to segfault the process.

* [BUGFIX] Living creatures weren't saving their UUID.

* [INTERNAL] Added support routines for Housing plugin to mud_manager and plugin_api modules.

* [INTERNAL] Removed unused preferences.

* [ADMIN] Finish preference setting descriptions in "preferences.c".

* [SELFTEST] Add a check that finds missing rooms, e.g. "east nonexistent_room" in a room definition when that room
doesn't exist.


   96790  231253 2430399 total
Auto-incrementing build number to 3016.
*      145 FIXMEs remaining in src/.
*       24 TODOs remaining in src/.
*        9 FIXMEs remaining in plugins/.
*      157 TODOs remaining in plugins/.

* [ADMIN] Server now checks for files that trigger a restart ("slashmudx.restart") and shutdown ("slashmudx.shutdown") -
it deletes any it finds at startup.  This feature could then be used by a Cocoa administration application.

* [FEATURE] Added 'encumbrance', which is a negative effect on speed from carrying too many items.  There's also an
additional line in the 'score' command output.

* [FEATURE] Added finer-grained hunger, thirst, intoxication reporting in living_do_score().

* [FEATURE] Added idea from AR: food, fluid and intoxication requires time to digest before affecting the player.

* [FEATURE] Removed hunting animals; they should eventually be rewritten as plugins.

* [FEATURE] Stolen items are flagged in the Agent's inventory display.

* [INTERNAL] Added dispose routine for events that allocated their own memory.

* [INTERNAL] Objects now have a uuid string instead of a raw uuid.

* [INTERNAL] Things that 'belong' to a creature are tagged with the owner's uuid string so stolen items can be detected.

* [INTERNAL] Moved some constants (max food/fluid/intoxication seconds) into the preferences module.

* [INTERNAL] Added a 'defeated' living state for handling recuperation.  Players who try to avoid the recuperation time
by quitting are now prevented from doing so.

* [SELFTEST] Added selftest for thing owner UUIDs.

* [SELFTEST] Fixed the selftests for food and drink.


   97256  229592 2427389 total
Auto-incrementing build number to 2923.
*      178 FIXMEs remaining in src/.
*       23 TODOs remaining in src/.
*        9 FIXMEs remaining in plugins/.
*      157 TODOs remaining in plugins/.

* [BUGFIX] 'unwield all' removed all armour instead of unwield all weapons.

* [SELFTEST] Added regression test for 'unwield all' bug.

* [SELFTEST] Added test for 'wear all' and 'remove all' commands.

* [SELFTEST] Added selftest that sends a kPluginSelfTest event to plugins.  They can do whatever they like and return 0
(failure) or 1 (success) as a boolean response to the event.  Plugins that don't understand the event are considered to
have passed.


   97153  229385 2426715 total
Auto-incrementing build number to 2893.
*      179 FIXMEs remaining in src/.
*       22 TODOs remaining in src/.
*        9 FIXMEs remaining in plugins/.
*      157 TODOs remaining in plugins/.

* [BUGFIX] Monsters in a room don't have their object ID in reverse video (but things do).

* [BUGFIX] (Koryn) No message sent to other players in the room when a player quits.

* [BUGFIX] The message received when trying to wield a weapon for a body part that already has a wielded weapon referred
to armour rather than weapons.

* [SELFTEST] Added regression test for base_name_contains() bug.


   97084  229213 2424395 total
Auto-incrementing build number to 2880.
*      179 FIXMEs remaining in src/.
*       22 TODOs remaining in src/.
*        9 FIXMEs remaining in plugins/.
*      157 TODOs remaining in plugins/.

* [BUGFIX] base_name_contains() was checking against the alias instead of the name.

* [FEATURE] Remove arrows and quivers.


   97068  229187 2424277 total
Auto-incrementing build number to 2872.
*      179 FIXMEs remaining in src/.
*       22 TODOs remaining in src/.
*        9 FIXMEs remaining in plugins/.
*      157 TODOs remaining in plugins/.

* [BUGFIX] (John) Missing stat names for "treasurefinding" and "wisdom".

* [BUGFIX] living_has_skill() could return false even if the living had the skill, in the case where the living has the
skill state but the corresponding skill is not known to the skill manager.

* [BUGFIX] The global talk list wasn't being initialized correctly.

* [PORTING] Rewrote access_rights module.

* [AUDIT] Check area files for "clan-access-policy" etc.

* [FEATURE] HTML statistics page.

* [FEATURE] HTML players page.

* [FEATURE] Completed more preference descriptions.

* [FEATURE] Add a Refresh header to the HTML page headers.

* [FEATURE] HTML plugins page.

* [FEATURE] HTML races page.

* [SELFTEST] Added regression test for missing stat names bug.

* [SELFTEST] Access rights.

* [SELFTEST] Added regression test for uninitialized global talk list bug.


* [INTERNAL] Move economy model (kitty, adjusting values for inflation) into model.{ch}.

* [SELFTEST] Classes.

* [ 95376  224309 2373527] Build 2758.


* [BUGFIX] Weight wasn't being correctly set on armours and weapons.

* [AUDIT] Updated florin_objects file.

* [FEATURE] Add armour/weapon condition to the Agent display for weapons and armours.

* [FEATURE] Add a description of the material to the display for weapons and armours.

* [FEATURE] Add a description of the item's condition to the display for weapons and armours.

* [FEATURE] Added damage and protection modifiers to Agent display for 'score' and examining items.

* [SELFTEST] Skill state.

* [SELFTEST] Skills.

* [ 95088  223512 2365955] Build 2708.


* [BUGFIX] Food and drink wasn't correctly parsing the 'tox-value' parameters.

* [FEATURE] Calibrated living_get_level().

* [FEATURE] Added materials ADT.

* [FEATURE] Added a model ADT, which contains computational routines (e.g. level from stats, weapon/armour value from
properties, etc.).

* [FEATURE] Re-enable thing breakage.

* [FEATURE] Allow 'pseudolevel' to be used in area files as a shortcut for setting stats, HP, SP.

* [FEATURE] New option "--printinfo" that prints armour, drink, food and weapon information to log files.

* [SELFTEST] Added a selftest for the armour/weapon value calculation routines.

* [ 94561  222128 2349500] Build 2646.


* [BUGFIX] (Neil) Race wasn't correctly getting the default teleport in/out message from the preferences module if it
didn't have a teleport in/out message of its own.

* [BUGFIX] Living objects weren't initializing, saving or reading class-level.

* [BUGFIX] (Neil) When player neil555 types "look" with neil in the room, the messages displayed is goofy. The tokens
%class-adj human-%class-noun are not being expanded.

* [BUGFIX] (Neil)  It appears when the second of two players login (both deposited into the same room).  Both players
get the room long description. See below.

* [ 92900  218089 2307242] Build 2560.


* [BUGFIX] (Neil)

	After I teach player a skill, the "skills" command does not correctly list the skill learned.
	[19] (n_bandage in zone default)
	BandageBox Test Room.
	BandageBox Test Room.
	There is one exit: [West]
	  [23] A box of bandages [20].
	  [20] Shandra the Healer is here, teaching the arts of medicine.
	Ok> teach bandage
	[ECHO] teach bandage
	Shandra the healer says, ' Okay, Neil, I'll teach you the bandage skill.'
	Shandra the healer has taught you the bandage skill.'
	Ok> skills
	[ECHO] skills
	Command: skills
	Object name: (null)
	Object ordinal: 0
	Subject name: (null)
	Subject ordinal: 0

* [BUGFIX] (Neil)

	2. When player neil unwields the Orcreaver, player neil555 gets the following message.
	You unwields your Orcreaver.
	3. When player neil wields the talkingsword, player neil555 gets the following message.
	You wields your talkingsword.

* [ 92883  218051 2306659] Build 2551.


* [BUGFIX] (Neil) When a new player starts at room dropzone the message says "look sign" but the command "look sign"
does not work.
	=> Should be 'examine sign', since the look command only deals with directions.
	=> Changed the area file.
* [FEATURE] Implement smapi_can_train_skill().

* [ 92823  217933 2305325] Build 2543.


* [FEATURE] Classes:
	- implemented class_check_prerequisites().
	- implemented class_check_race().
	- implemented class_info().
	- implemented class_join().

* [ 92820  217939 2305340] Build 2537.


* [FEATURE] Completed porting group routines.

* [SELFTEST] Groups.

* [ 92389  216762 2294199] Build 2523.



* Tagged CVS as PREVIEW_4_0.

	- slashmudx-1.0-preview-4.dmg (11.7 MiB)
		MD5 (slashmudx-1.0-preview-4.dmg) = 8269f6d4ab51da41d5a6f5ee7bd9da17

* [FEATURE] Further porting of classes from Mac OS 9 version.

* [ 91715  214860 2273617] Build 2478.


* [BUGFIX] (Neil)

	It appears that the server is not init'ing skills correctly.  I get a  
	lot of the following and do not see anything obviously wrong with the  
	skill files.
	The first warning happens when starting to init the 2nd skill in the  
	standard_skills file.
	=> Rewrote skill setup code.
	=> Fixed bug in generalspell.
	=> Fixed bug in kg_array:verify_array().
	=> Fixed bug in kg_array_list:kg_array_list_iterate().
* [ 91600  214520 2270651] Build 2471.


* [BUGFIX] (Neil) Userfields still do not appear to survive "quit" command.
	=> userfields weren't being loaded, fixed.
* [ 91607  214532 2270758] Build 2460.


* [BUGFIX] (Neil) Long description lines were reversed.
	=> Replaced the long description set with a list.

* [ 91587  214476 2270222] Build 2456.


* [BUGFIX] It does not appear that userfields are saving when a player quits.
	=> fixed, players weren't saving userfields.

* [ 91588  214470 2270019] Build 2447.


* [BUGFIX] The self-test doesn't complete:

	gdb ./slashmudx.debug
	run --memdebug --selftest

seems to be a problem in the quad hash table for doors.  Traced to a bug in kg_strlcpy() (I believe the implementation
from this was taken from BSD code - perhaps they can assume that memory is already zeroed).

* [BUGFIX] QuestMaster sends a custom event that is the address of a null pointer.
	=> Added custom QuestEvent that can be used for communication between the QuestMaster and QuestAttachment.

* [BUGFIX] 'slashmudx.debug --check-world' doesn't exit after checking the world files.

* [BUGFIX] currencies that do not have a denomination with a value of 1 will now fail to load.  This prevents problems
later on when trying to give change.

* [BUGFIX] Crash when Control-C at login prompt (Intel)

		The result of hitting control c at the login name request prompt:
		***** slashmudx 1.0.0 preview (build 1879)
		***** Running on Darwin 8.9.1
		Local time and date is 17:20:10 on Thursday, 29 March 2007.
		This server has been up for 11 seconds.
		Visitors: Enter 'guest' as your character name and press RETURN when asked for a password.
		Enter the name of a new or existing character:
		<- enter control c here
		get the following
		Program received signal EXC_BAD_ACCESS, Could not access memory.
		Reason: KERN_PROTECTION_FAILURE at address: 0x00000000
		0x0008bbda in spirit_find_player (spirit=0x11cbfb0, line=0xe6c20 "") at src/spirit.c:479
		479 length = strlen(token);

	=> Fixed crash, but server may appear unresponsive when special Telnet sequences (e.g. INTR, sent by Ctrl-C) are
entered because the client is expecting a response that the server will never send.

* [BUGFIX] (Neil) When I entered a room with the fireswamp plugin my hitpoints went to 0 and I did not die (regular
	=> logic was setting hitpoints to 'hitpoints - hitpoints * damage * damagePercent / 100' instead of 'hitpoints -
damage * damagePercent / 100'

* [BUGFIX] Server crash when destroying a terminal window after putting in a player name but before entering a password.

* [BUGFIX] (Neil) Server ran for about 20 minutes with essentially no activity and all plugins installed.  Both players
logged in at server start and then no activity.  I am assuming the fault was triggered by one of my wondering monsters.
	src/server.c:190: failed assertion `NULL != event'
	Program received signal SIGABRT, Aborted.
	0x9003d59c in kill ()
	(gdb) bt
	#0  0x9003d59c in kill ()
	#1  0x9010f8bf in raise ()
	#2  0x9010e412 in abort ()
	#3  0x000e6322 in __eprintf ()
	#4  0x000854b4 in process_events (base=0x11d7370, tick=9295) at src/server.c:190
	#5  0x000d8c54 in kg_set_iterate (set=0x6038a0, iterator=0x85462 <process_events>, context=0x244f) at
	#6  0x00086856 in server_update () at src/server.c:622
	#7  0x00087db4 in server_event_loop () at src/server.c:1464
	#8  0x00044a2f in main (argc=4, argv=0xbffff680) at src/main.c:112

	=> Corrected room event queue.

* [BUGFIX] Creatures aren't dying from plugin events like the virus (hitpoints stay at 0).

* [BUGFIX] When I issue "shutdown 10" from agent and the I get the following:

	src/armageddon_object.c:63: failed assertion `uArmageddon == NULL'
	Program received signal SIGABRT, Aborted.
	0x9003d59c in kill ()
	(gdb) bt
	#0  0x9003d59c in kill ()
	#1  0x9010f8bf in raise ()
	#2  0x9010e412 in abort ()
	#3  0x000e6322 in __eprintf ()
	#4  0x0000d361 in create_armageddon (countdown=10, restarting=0) at  
	#5  0x000880bc in server_begin_shutdown (seconds=10, restarting=0) at  
	#6  0x00005723 in agent_shutdown_command_parse (self=0x604b10,  
	invoker=0x182ee00, token=0xbfffe37c "shutdown", remainder=0xbfffe385  
	"10") at src/agent_commands.c:1231
	#7  0x000233e3 in virtual_command_parse (self=0x604b10,  
	living=0x182ee00, token=0xbfffe37c "shutdown", remainder=0xbfffe385  
	"10") at src/command.c:217
	#8  0x0000a5a0 in agent_parse_command (living=0x182ee00,  
	token=0xbfffe37c "shutdown", remainder=0xbfffe385 "10") at src/ 
	#9  0x0009d370 in virtual_parse_command (self=0x182ee00,  
	token=0xbfffe37c "shutdown", remainder=0xbfffe385 "10") at src/ 
	#10 0x0004cd26 in living_parse_spirit_command (self=0x182ee00,  
	line=0xbfffe78c "shutdown 10") at src/living_virtuals.c:744
	#11 0x00065e19 in player_parse_spirit_command (living=0x182ee00,  
	line=0xbfffe78c "shutdown 10") at src/player_overrides.c:1075
	#12 0x0009d3cc in virtual_parse_spirit_command (self=0x182ee00,  
	line=0xbfffe78c "shutdown 10") at src/virtuals.c:997
	#13 0x0008b4df in spirit_parse_command (spirit=0x11d1ab0,  
	input=0xbfffe78c "shutdown 10") at src/spirit.c:279
	#14 0x0005e58f in parse_data (connection=0x11d1a90, buffer=0xbffff0d7  
	"shutdown 10\r\n  ,  234, base_update: (?G\v", buflen=13) at src/ 
	#15 0x0005e6d8 in read_data (connection=0x11d1a90) at src/ 
	#16 0x0005ea51 in process_network () at src/networking.c:472
	#17 0x00087db9 in server_event_loop () at src/server.c:1465
	#18 0x00044a2f in main (argc=4, argv=0xbffff680) at src/main.c:112

* [BUGFIX] Potions weren't responding to commands.

* [BUGFIX] (Neil) Newbie can not wear the newbie armour. Evidently default min and max alignment are not being set
correctly when the object is created.  As both are set to zero when the object does not specify an alignment
	=> thing_object.c now correctly initialises the min/max requirement fields.

* [BUGFIX] Potion saving:
	You quaff a potion of (null).
	=> feature wasn't complete, added rest of the save code.

* [BUGFIX] (Neil) Fake event in event queue.  To recreate:
	1. Login as a new character
	2. Move w, n, w.
	3. Get/wield/wear leather and bronze
	4. Move n, w, n
	5. attempt to kill chick
	6. die
	7. catch virus in haven central room.
	The first time this hit me I caught the virus right away. The second time (logs below) I had to go back and catch
the virus. It appears the virus required to hit this.
	Hit assert.
	=> corrected event queue code.

* [BUGFIX] Virus attachment was returning an invalid string in the event's string response.

* [BUGFIX] 'score' command caused a crash when multiple attachments added a line.

* [BUGFIX] List of races doesn't display correctly when creating a new character:

	Please select a race for your character, or press RETURN for more information:

* [BUGFIX] (Neil) Sleep doesn't restore hitpoints and spellpoints.
	=> food and/or drink was required.  Now the server.conf setting 'healing-requires-food true/false' (default false)
toggles this behaviour.

* [BUGFIX] When a body part dropped below full health, the living's light count was decremented.
	=> Only decrement the light count if the body part provides light.
	=> This also fixes the problem with no deaths during single combat selftest or group combat selftest.

* [BUGFIX] The living_change_hsp() routine was applying the spellpoint change to both hitpoints and spellpoints.

* [BUGFIX] The maximum fluid/food/intoxication second values were set too low.

* [BUGFIX] Eliza was trying to use the iterate callback routine on an iterator list (doesn't support it).

* [BUGFIX] Eliza and janitor had failures during the kPluginNotePointers event.

* [BUGFIX] (Neil) Wearing multiple instances of an armour seems to work.
	=> Armours that had an empty location set or alternate location set could be worn when they shouldn't have been.

* [BUGFIX] (Neil) Wielding multiple instances of a weapon seems to work.
	=> Weapons that had an empty location set or alternate location set could be wielded when they shouldn't have been.

* [BUGFIX] Some ObjectLibrary armours/weapons had 'wielded true' or 'worn true' in their base definitions.

* [BUGFIX] (Neil) newbie area 'eat potato' fails.
	=> food and drink aren't complete yet (no code to implement commands).
	=> works now.

* [BUGFIX] (Neil)
	After the last round of changes I can't seem to pick up anything in  
	the newbie area with a new character.
	The Newbie Training Area.
	There are several exits: [North, east]
		 A sign is posted here.
		 A magical leprechaun potato.
	get potato
	[ECHO] get potato
	Command: get
	Object name: potato
	Object ordinal: 1
	Subject name: (null)
	Subject ordinal: 0
	The potato is too much for you to carry.
	The Newbie Training Area.
	There are several exits: [North, east]
		 A bronze shortsword lies here.
		 A set of leather armour lies here.
	get shortsword
	[ECHO] get shortsword
	Command: get
	Object name: shortsword
	Object ordinal: 1
	Subject name: (null)
	Subject ordinal: 0
	The bronze shortsword is too much for you to carry.
	=> fixed problem with comparison between signed and unsigned ints.

* [BUGFIX] Inventory command didn't correctly display how much additional weight the player could carry.
	=> fixed.

* [BUGFIX] Dead players retain viruses.
	=> VirusAttachment now responds to kPluginAttachmentCreatureDied event by removing itself.
	=> added kPluginAttachmentCreatureDied to VirusAttachment's register_events routine.
	=> Don't want to do this, rolled back previous changes to VirusAttachment.  Players retain viruses because they are
restored to their last saved state, which (of course) includes the virus.  If this weren't the case, players could
simply save and quit, then rejoin to get rid of a virus.
	=> Added a special kPluginAttachmentPlayerDied event that attachments can use to remove themselves on death.

* [BUGFIX] (Neil) Server assert when Agent logs out:
	src/base_object.c             ,  122, DEBUG   :  
	(display_event_queue)     [3] Breathe active tick = 20078
	src/base_object.c             ,  136, DEBUG   :  
	(do_display_event_queue) basic (30): base_process_events() event  
	queue (event processed):
	src/base_object.c             ,  122, DEBUG   :  
	(display_event_queue)     [1] Update active tick = 20074
	src/base_object.c             ,  122, DEBUG   :  
	(display_event_queue)     [2] Heal active tick = 20112
	src/base_object.c             ,  122, DEBUG   :  
	(display_event_queue)     [3] Breathe active tick = 20078
	src/base_object.c             ,  136, DEBUG   :  
	(do_display_event_queue) neilshop2 (36): base_process_events() event  
	queue (start):
	src/base_object.c             ,  122, DEBUG   :  
	(display_event_queue)     [1] Update active tick = 20077
	src/base_object.c             ,  136, DEBUG   :  
	(do_display_event_queue) neilshop1 (16): base_process_events() event  
	queue (start):
	src/base_object.c             ,  122, DEBUG   :  
	(display_event_queue)     [1] Update active tick = 20081
	src/networking.c              ,  634, DEBUG   : (process_network)  
	Closing connection 52.
	src/base_virtuals.c           , 1175, EVENT   :  
	(base_add_to_contents) (null) (86) added to the contents of neilshop1  
	src/base_virtuals.c           , 1253, EVENT   :  
	(base_remove_from_contents) (null) (71) removed from the contents of  
	neilshop1 (16).
	src/base_object.c             ,  136, DEBUG   :  
	(do_display_event_queue) neilshop2 (36): base_process_events() event  
	queue (start):
	src/base_object.c             ,  122, DEBUG   :  
	(display_event_queue)     [1] Update active tick = 20077
	src/base_object.c             ,  136, DEBUG   :  
	(do_display_event_queue) neilshop1 (16): base_process_events() event  
	queue (start):
	src/base_object.c             ,  122, DEBUG   :  
	(display_event_queue)     [1] Update active tick = 20081
	src/base_virtuals.c           , 1253, EVENT   :  
	(base_remove_from_contents) (null) (74) removed from the contents of  
	(null) (72).
	src/base_virtuals.c           , 1253, EVENT   :  
	(base_remove_from_contents) (null) (75) removed from the contents of  
	(null) (72).
	src/base_virtuals.c           , 1253, EVENT   :  
	(base_remove_from_contents) (null) (76) removed from the contents of  
	(null) (72).
	src/kg_memory.c:289: failed assertion `0'
	Program received signal SIGABRT, Aborted.
	0x900482ec in kill ()
	(gdb) bt
	#0  0x900482ec in kill ()
	#1  0x9012e7d4 in abort ()
	#2  0x001207e0 in __eprintf ()
	#3  0x000f930c in kgmem_is_valid_allocation_header (header=0x183ce00)  
	at src/kg_memory.c:289
	#4  0x000f90b4 in kgmem_dispose_ptr (p=0x25c30f0) at src/kg_memory.c:414
	#5  0x000f9558 in kg_dispose_ptr (p=0x25c30f0) at src/kg_memory.c:502
	#6  0x0010c38c in kg_set_dispose (set=0x25ae1c0) at src/kg_set.c:145
	#7  0x0003cf74 in dispose_living_data (living=0x182a6cc) at src/ 
	#8  0x00050ea4 in living_finished (base=0x182a640) at src/ 
	#9  0x000742f4 in player_finished (base=0x182a640) at src/ 
	#10 0x0000b3c4 in agent_finished (base=0x182a640) at src/ 
	#11 0x000bb934 in virtual_finished (self=0x182a640) at src/virtuals.c: 
	#12 0x000a3910 in server_update () at src/server.c:642
	#13 0x000a5448 in server_event_loop () at src/server.c:1460
	#14 0x00050a74 in main (argc=4, argv=0xbffff250) at src/main.c:112
	(gdb) frame 8
	#8  0x00050ea4 in living_finished (base=0x182a640) at src/ 
	150             dispose_living_data(&self->living_data);

	=> Can't reproduce. Logging in then out works fine with the 'koryn' agent and the 'neil' agent.
	=> Eventually able to reproduce.  Appears to be a problem with the mCurrentLanguage field, which has been cleaned up
and fixed.

* [BUGFIX] Portals didn't unregister themselves with the portal manager when finished.

* [BUGFIX] Server asserts when a room resets.  The room is still in the room manager's list of active rooms.
	=> when a room resets it now removes itself from the room manager's list of active rooms.

* [BUGFIX] The amount of weight a creature could carry was multiplied by an extra factor of 1000 :)

* [BUGFIX] (Neil) assert when room n_fountain is loaded.
	Started testing torch and waterskin.  Created items in the various  
	files, then started server and it immediately asserts when logging  
	in.  Repeatable.
	=> Attachment has registered for plugin updates but doesn't have events in its event queue.
	=> Don't automatically register attachments for updates in base_add_attachment() - they need to explicitly call

* [BUGFIX] (Neil) the "inventory" command does not seem to give the same results as the "eq" command.
	=> (Koryn) This is an old bug report, it may have been fixed but needs checking.
	=> (Koryn) Can't reproduce, seems to work fine.

* [BUGFIX] (Koryn) Plugin updates seem to be sent every tick - this should be throttled.
	=> Done - by default plugin updates are sent every 10 ticks.

* [BUGFIX] (Neil) light count verify fails when a plugin living moves into a room:

	src/room_overrides.c          , 1628, ERROR   : (room_verify_light_count) incorrect light count in 'neilshop2':
mLightCount = 0, sum of contained objects = 1
	src/room_overrides.c:1630: failed assertion `sum == self->base_data.mLightCount'
	Program received signal SIGABRT, Aborted.
	0x9004716c in kill ()
	(gdb) bt
	#0  0x9004716c in kill ()
	#1  0x90128b98 in abort ()
	#2  0x00114b38 in __eprintf ()
	#3  0x00094854 in room_verify_light_count (base=0x13f1fd0) at src/room_overrides.c:1630
	#4  0x000b3e2c in virtual_verify_light_count (self=0x13f1fd0) at src/virtuals.c:727
	#5  0x00093214 in room_add_to_contents (base=0x13f1fd0, item=0x1811000) at src/room_overrides.c:983
	#6  0x000b3504 in virtual_add_to_contents (self=0x13f1fd0, item=0x1811000) at src/virtuals.c:536
	#7  0x0008e9b8 in room_new_arrival_living (self=0x13f1fd0, living=0x1811000, direction=kNorth) at
	#8  0x0008e490 in room_move_living (self=0x13f9500, living=0x1811000, direction=2) at src/room_object.c:370
	#9  0x0007e4c0 in smapi_room_move (room=0x13f9500, living=0x1811000, direction=kSouth) at src/plugin_api.c:2699
	#10 0x0074db74 in pi_update ()
	#11 0x0074e160 in plugin_main ()
	#12 0x00075868 in plugin_call_main_routine (plugin=0x13c3760, instance_data=0x13eea40, event_code=8,
plugin_event=0x13c2030) at src/plugin.c:463
	#13 0x0003bd38 in living_plugin_update (self=0x1811000) at src/living_object.c:575
	#14 0x00057e50 in living_compulsory_update (self=0x1811000) at src/living_virtuals.c:612
	#15 0x0004fd48 in living_update (base=0x1811000) at src/living_overrides.c:162
	#16 0x0005beb0 in monster_update (base=0x1811000) at src/monster_overrides.c:139
	#17 0x000b2328 in virtual_update (self=0x1811000) at src/virtuals.c:198
	#18 0x0002f9a4 in update_event_execute (self=0x13eec20, host=0x1811000) at src/event.c:327
	#19 0x0002fe08 in event_execute (event=0x13eec20, host=0x1811000) at src/event.c:441
	#20 0x000167e0 in base_process_events (self=0x1811000, tick=5100) at src/base_object.c:688
	#21 0x00099da4 in process_events (base=0x1811000, tick=5100) at src/server.c:197
	#22 0x00102800 in kg_sorted_set_iterate (sorted_set=0x11062e0, iterator=0x99c9c <process_events>, context=0x13ec) at
	#23 0x0009ad90 in server_update () at src/server.c:569
	#24 0x0009c9b8 in server_event_loop () at src/server.c:1383
	#25 0x0004f8a4 in main (argc=3, argv=0xbfffef94) at src/main.c:112

	=> Might be the same as this: start in n_fountain, 'light torch', 'get torch':
		src/base_virtuals.c           , 1657, ERROR   : (base_verify_light_count) incorrect light count in
'neil_basictorch': mLightCount = 1, sum of contained objects = 0
		src/base_virtuals.c:1659: failed assertion `sum == self->base_data.mLightCount'
		Program received signal SIGABRT, Aborted.
		0x9003ddac in kill ()
		(gdb) bt
		#0  0x9003ddac in kill ()
		#1  0x9010ffdf in raise ()
		#2  0x9010eb32 in abort ()
		#3  0x000f4919 in __eprintf ()
		#4  0x00018798 in base_verify_light_count (self=0x182e640) at src/base_virtuals.c:1659
		#5  0x000ab6b6 in virtual_verify_light_count (self=0x182e640) at src/virtuals.c:727
		#6  0x000887ca in room_verify_light_count (base=0x25c67b0) at src/room_overrides.c:1613
		#7  0x000ab6b6 in virtual_verify_light_count (self=0x25c67b0) at src/virtuals.c:727
		#8  0x00087703 in room_remove_from_contents (base=0x25c67b0, item=0x182e640) at src/room_overrides.c:1030
		#9  0x000ab258 in virtual_remove_from_contents (self=0x25c67b0, item=0x182e640) at src/virtuals.c:546
		#10 0x00017f08 in base_be_picked_up (self=0x182e640, getter=0x182ba40, verbose=1) at src/base_virtuals.c:1464
		#11 0x000ab5b2 in virtual_be_picked_up (self=0x182e640, getter=0x182ba40, verbose=1) at src/virtuals.c:676
		#12 0x000437d4 in living_do_get (self=0x182ba40, item=0x182e640) at src/living_object.c:5776
		#13 0x00035062 in living_get_command_execute (self=0x60c540, invoker=0x182ba40, data=0x25c8cb0) at
		#14 0x00024cd5 in virtual_command_execute (self=0x60c540, living=0x182ba40, data=0x25c8cb0) at src/command.c:236
		#15 0x00024e4e in slashlex_command_parse (self=0x60c540, living=0x182ba40, token=0xbfffe9ac "get",
remainder=0xbfffe9b0 "torch") at src/command.c:293
		#16 0x00024c27 in virtual_command_parse (self=0x60c540, living=0x182ba40, token=0xbfffe9ac "get",
remainder=0xbfffe9b0 "torch") at src/command.c:217
		#17 0x00051041 in living_parse_command (self=0x182ba40, token=0xbfffe9ac "get", remainder=0xbfffe9b0 "torch") at
		#18 0x0000b113 in agent_parse_command (living=0x182ba40, token=0xbfffe9ac "get", remainder=0xbfffe9b0 "torch")
at src/agent_overrides.c:368
		#19 0x000abe9c in virtual_parse_command (self=0x182ba40, token=0xbfffe9ac "get", remainder=0xbfffe9b0 "torch")
at src/virtuals.c:985
		#20 0x0005119e in living_parse_spirit_command (self=0x182ba40, line=0xbfffedb4 "get torch") at
		#21 0x0006b924 in player_parse_spirit_command (living=0x182ba40, line=0xbfffedb4 "get torch") at
		#22 0x000abef8 in virtual_parse_spirit_command (self=0x182ba40, line=0xbfffedb4 "get torch") at
		#23 0x00099029 in spirit_parse_command (spirit=0x25c35a0, input=0xbfffedb4 "get torch") at src/spirit.c:279
		#24 0x00063f6a in parse_data (connection=0x25c3430, buffer=0xbffff707 "get torch\r\n", buflen=11) at
		#25 0x000640cc in read_data (connection=0x25c3430) at src/networking.c:622
		#26 0x0006445c in process_network () at src/networking.c:739
		#27 0x00094032 in server_event_loop () at src/server.c:1461
		#28 0x0004902a in main (argc=1, argv=0xbffffb94) at src/main.c:112
	=> Rewrote light calculation code.
	=> Added attachment and plugin light count to light calculations.
	=> rewrote body_get_light_count() to be more efficient.  Has a 'cached light value valid' indicator that is cleared:
		- when first loaded.
		- when light-providing part is damaged.
		- when light-providing part is restored to full health.

* [BUGFIX] Room short descriptions weren't working.

* [BUGFIX] (Neil) The autodestruct attachment plugin does not appear to be getting either plugin kPluginAttachmentUpdate
or kPluginUpdate events.
	The test room is "n_ad" in my area.  You will find 2 amulets with autodestruct attachments.

	=> Plugins receive kPluginAttachmentUpdate when they are 'piggybacking' on the update event from another object
(i.e. a living).  When they are attached to an object that doesn't normally receive updates (e.g. an amulet in this
case), they need to use the kPluginUpdate event AND ensure that they call smapi_register_for_updates() on their host. 
Some server changes were needed to get this working (because previously only objects that were ThingPtrs or subclasses
could be registered for updates), but those have been done.

* [BUGFIX] (Koryn) Autodestruct attachments weren't receiving kPluginAttachmentPostInitialise events.
	=> These events were never sent - should be using kPluginPostInitialise instead.
	=> Removed kPluginAttachmentPostInitialise from the server.

* [BUGFIX] (Koryn) kPluginPostInitialise events didn't have kParameterHost set correctly.
	=> Fixed.

* [BUGFIX] (Koryn) attachment_finish_loading() was calling base_add_attachment() and base_post_initialise(), which both
sent a kPluginPostInitialise event.
	=> Fixed.

* [BUGFIX] (Koryn) autodestruct attachment wasn't parsing lines correctly.
	=> Fixed.

* [FEATURE] Armageddon now issues a shutdown message immediately.

* [FEATURE] The 'alias' and 'apparent-alias' lines can now contain multiple space-separated words.

* [FEATURE] First cut of container objects.

* [FEATURE] Things, Armours and Weapons now retrieve default messages from the preferences for breaking, using,

* [FEATURE] First cut of code to merge Coins when they are added to a living's purse.

* [FEATURE] Food and drink save code.

* [FEATURE] Add basic food, fluid, intoxication display to score.

* [FEATURE] First cut of drink code.

* [FEATURE] First cut of food code.

* [FEATURE] Attachments can now determine whether they persist after a player dies by receiving the
kPluginAttachmentPlayerDied event.

* [FEATURE] container_finish_loading() now calls the thing_finish_loading() routine.

* [FEATURE] thing_get_weight() now returns the base_data.mWeightGrams field.

* [FEATURE] container_get_weight() now correctly implemented.

* [FEATURE] Server now correctly refuses to negotiate any TELNET options, meaning that both sides should assume RFC 854
Network Virtual Terminal behaviour, including line-at-a-time mode (which the server requires).

* [FEATURE] Detect clients sending single characters at a time and send them a warning about their client's behaviour.

* [FEATURE] Finished implementing code for skill_state.

* [FEATURE] Finished parsing code for skills.

* [FEATURE] Finished porting code for skills.

* [FEATURE] Finished porting userfields.

* [FEATURE] Added world string for singular and plural weight units (e.g. kilogram, kilograms).

* [FEATURE] Added server string for the admin email address.

* [FEATURE] Add amount of additional weight that can be carried to the 'score' and 'inventory' commands.  Stick to

* [FEATURE] Ported all group routines apart from SplitGold() / group_split_money().

* [FEATURE] Added body part description to wielded weapons and worn armours in 'inventory' command.

* [FEATURE] Added smapi_set_update_event_interval() so plugins can set the frequency of their update events.

* [FEATURE] Made information that is only displayed to Agents more obvious (yellow on black).

* [INTERNAL] Replaced DEBUG_LIGHT_COUNT with a server setting.  The intention is that eventually there will be an Admin
command that can be used to turn this off and on.

* [INTERNAL] Added setters for preferences.

* [INTERNAL] Remove smapi_set_hitpoints() in favour of smapi_change_hitpoints(), which correctly processes hitpoint
changes using virtual_change_hitpoints().

* [INTERNAL] Remove smapi_set_spellpoints() in favour of smapi_change_spellpoints(), which correctly processes
spellpoint changes using virtual_change_spellpoints().

* [INTERNAL] Added base_get_event_name() which returns the object's name and object id as a string in the format
"standardname (10)", or "capname (10)" if the object has no standardname.

* [INTERNAL] Refactored base_parse_line() and room_parse_line() to remove duplicate code.

* [INTERNAL] Added two new settings:
	- kSettingTicksPerRealSecond, which determines the target number of server ticks during each real world second;
	- kSettingTicksPerGameSecond, which determines the number of server ticks before the game second increments;

* [LOGGING] Add game event logging for players logging in and logging off the server.

* [LOGGING] Room loading:
	- room loaded into memory from area files.
	- room resets.
	- room added to current area repository.
	- room flushed from current area repository.
	- room loaded from current area repository.

* [SELFTEST] Passed: ensure '--memdebug --selftest' runs if QuestMaster plugin IS included.

* [SELFTEST] Added basic test for containers.

* [SELFTEST] Added basic test for coin merging.

* [SELFTEST] Added tests for getting ammoboxes, armours, containers, drink, food and weapons.

* [SELFTEST] Added tests for wearing and removing armours.

* [SELFTEST] Added tests for wielding and unwielding weapons.

* [SELFTEST] Aliases
	- multiple (space-separated) aliases should all be recognized.

* [SELFTEST] Purses should correctly collapse coins of the same denomination.

* [SELFTEST] Coin merging in rooms.

* [SELFTEST] DrinkPtr selftest
	- create monster.
	- add drink to monster.
	- force monster to do 'drink %name'.
	- check that the monster is no longer holding the drink.
	- check that the monster has a bottle object.
	- check that the monster's properties have increased by the drink's fluid/hp/sp/tox values.

* [SELFTEST] FoodPtr selftest
	- create monster.
	- add food to monster.
	- force monster to do 'eat %name'.
	- check that the monster is no longer holding the food.
	- check that the monster's properties have increased by the food's food/fluid/hp/sp/tox values.

* [SELFTEST] For wearing multiple armours:
	- create monster.
	- add two copies of an armour to monster.
	- force monster to wear all.
	- check that the monster has only worn one instance of the armour.

* [SELFTEST] For wielding multiple weapons:
	- create monster.
	- add two copies of an weapon to monster.
	- force monster to wield all.
	- check that the monster has only wielded one instance of the weapon.

* [SELFTEST] Added tests for portals transporting monsters.

* [SELFTEST] Added container tests:
	- weight factor.
	- item limit.
	- weight limit.

* [SELFTEST] Portals with another portal as the destination.
	- put two portals in unconnected rooms with each as the target of the other.
	- force a monster to enter the portal and ensure it ends up in the other room.

* [SELFTEST] Corpse decaying:
	- create a corpse.
	- check that it correctly corpse.
	- check that it vanishes when expected.

* [SELFTEST] Statue decaying:
	- create a statue.
	- check that it correctly deteriorates.
	- check that it vanishes when expected.

* [SELFTEST] Userfields:
	- adding.
	- removing.
	- retrieving as int values.

* [SELFTEST] Added tests for titles.

* [TEST] Passed: logging in as 'koryn.backup' to make sure backup files are filtered correctly.

* [ADMIN] Added game event log in 'Logs/game_eventsXXX.log'.

* [BUILD] Create Universal binaries (or separate Intel/PowerPC builds).  Instructions have been added to the INSTALL

* [BUILD] Set up infrastructure to compile production version against libgc.
	=> Added code to libkoryn to call GC_MALLOC() instead of malloc() if USE_LIBGC_MALLOC is defined and it isn't a
debug build.
	=> Added '--enable-libgc' option to the slashmudx configure script, which adds libgc to the link line.

* [BUILD] Set up separate checks for CXX flags in '' so that DEBUG_CXXFLAGS doesn't end up compiling with

* [ 91586  214467 2269953] Build 2446.


* Bug fix: memory debugging checks were being called regardless of the '--memdebug' flag.

* Bug fix: removed extraneous memory debugging from drink_object.c.

* Bug fix: removed extraneous memory debugging from standard_library.c.

* [ 85421  199017 2093475] Build 1879.


* Use kg_memory_note_ptrs_iterate() in Shop plugin's pi_note_ptrs().

* Added kPluginNotePointers support to C++ plugins.

* Server plugin code will assert if plugin hasn't registered to receive kPluginNotePointers event (to catch omissions).

* Add -O0 to DEBUG_FLAGS autoconf variable in configure script.

* Remove -pedantic from compiler flags (cannot work with dlsym() and gcc 4.0).

* Remove -fstack-check from Darwin 8.3 (OS X 10.4.3) compiler flags (doesn't work either).

* Fix almost all gcc 4.0.x warnings in Darwin 8.3 compile.

* [ 85413  199004 2093443] Build 1870.


* Added support for kPluginNotePointers event to the server.

* Added smapi_malloc() and smapi_free() routines to the Plugin API for memory allocation/disposal.

* Use AC_HELP_STRING() macro in the configure script to align the output from 'configure --help'.

* Remove KG_MEMORY_DEBUG and DEBUG_VERSION from the files.

* Fix the server's so it doesn't try and 'touch' files that don't (yet) exist.

* [ 85421  198912 2091211] Build 1850.


* [libkoryn] Folded memory debugging into the debug version to speed up build times.  The debug version can now have
memory debugging activated by calling kg_memory_debug_enable() rather than linking against a special memdebug build.

* Folded memory debugging into the debug version to speed up build times.
	=> modified files to remove the memdebug targets.
	=> modified server commandline processing to activate memory debugging if '--memdebug' is a commandline argument.

* Memory leak: light count debugging wasn't counting the light log file.

* [ 85395  199429 2092822] Build 1813.


* Bug fix: testing for an attachment by loading it and then disposing it with smapi_finished() caused an assert to
trigger because the attachment had no host.
	=> modified the disposal routine so that it doesn't attempt to remove an attachment from its host if it has no host.

* Bug fix: QuestMaster didn't check for NULL token/remainder from an event before using them.

* Memory leaks: added code to time_manager.c that notes the names of days, months, years.

* Memory leaks: added plugin event, kPluginNotePointers, for noting allocated pointers.  Plugins should respond to this
by calling smapi_note_ptr() on any pointers stashed in the instance data that were allocated with KG_XALLOCATE() or

* [libkoryn] fixed memory leak in kg_logging, added kg_log_note_ptrs() routine.

* [libkoryn] added string handling utility routines to kg_string (kg_get_string, kg_replace_string and

* [ 85394  199445 2094214] Build 1773.


* Bug: 'unlock east' (or west) doesn't work for Agents from "easternroom".  Unlocking should always work for Agents - or
maybe there should be a 'ghost east' command for Agents?  That sounds more appealing :)
	=> these commands work fine.

* Bug fix: if a new player connection was aborted, the server would attempt to create a statue for the player.  This
caused asserts to trigger, because the player didn't have a race yet. (Neil)
	=> player_create_statue() checks to see that the player has completed the name/password/race selection process
before creating a statue.

* Bug fix: 'remove' with no arguments caused a crash.

* [ 85339  198470 2089247] Build 1751.


* Remove file on termination.

* Ensure all plugins register events and remove smapi_want_event() and supporting code. (Done for plugins, still need to
remove server code..Neil 3/21/05)

* Implemented first cut at Agent's 'ghost' command.  Needs to be tested.

* Bug fix: 'slashmudx.debug --crash-report' was failing if a plugin tried to access the world time (testcpluginthing

* Bug fix: an assert could fire in base_install_plugin() when loading a plugin twice; now it ignores the second loading
and logs the event.

* Bug fix: inventory command for Agents now lists the object IDs in yellow. (Koryn)

* Bug fix: default server exit messages weren't used in player_enter_room() and player_exit_room():

	Father Augustine Janitor Path (null) to the east.

* Bug fix: torch plugin would incorrectly assert if it encountered the line 'torch-lit false' when already unlit or
'torch-lit true' when already lit.

* Bug: shape command doesn't work. (Koryn)
	=> works fine:
		Ok> shape colonel
		[ECHO] shape colonel
		Command: shape
		Object name: colonel
		Object ordinal: 1
		Subject name: (null)
		Subject ordinal: 0
		Orc colonel is in excellent shape.

* Added implementation to the class.c file.

* [ 85327  198423 2088911] Build 1744.


* Modified libkoryn's kg_directory_iterator module to support a directory filter.  Added a CVS directory filter to the
utility_procedures module, and modified invocations of kg_iterate_directory so that CVS directories are filtered out. 
This means the server should be able to run from a direct checkout of the 'auxiliary' CVS module.

* Installed slashmudx binaries to /usr/local/bin and checked that they work correctly from there when the current
working directory contains the world files etc. (Koryn)

* More unused variable compiler warning fixes.

* Modified build infrastructure.  Assuming the server's file is in a directory called 'slashmudx':
	- server binaries are no longer copied to the 'slashmudx/bin' directory.
	- plugin binaries are copied to 'slashmudx/plugins/bin' instead of 'slashmudx/bin/plugins'.  A useful configuration
is to have 'slashmudx/plugins/bin' be a symbolic link to the 'auxiliary/plugins' directory.

The recommended way to build and run the server is:

	$ cd slashmudx
	$ ./configure
	$ make
	$ sudo make install

which will make the server and plugins, then install the server binaries in /usr/local/bin.  If 'plugins/bin' is a
symbolic link as described above, the server can now be run directly from the 'auxiliary' directory:

	$ slashmudx.debug


	$ gdb /usr/local/bin/slashmudx.debug

* [ 85081  196696 2080367] Build 1710.



* Tagged CVS as PREVIEW_3_0.

	- slashmudx-preview-3.dmg (9.1MB)
		MD5 (slashmudx-preview-3.dmg) = 79aedf61de48bfd56b35b21fe1c350a4
	- slashmudx-preview-3-lite.dmg (3.8MB)
		MD5 (slashmudx-preview-3-lite.dmg) = dc02fbb560871b6742adc5134aa43051

* Bug fix: examining a player who had clan state for an absent clan caused a crash.

* Bug fix: quitting telnet session resulted in a failed assertion:

src/spirit.c:80: failed assertion `spirit->mMagicNumber == kSpiritMagicNumber'

Program received signal SIGABRT, Aborted.
0x900429ac in kill ()
(gdb) Quit
(gdb) bt  
#0  0x900429ac in kill ()
#1  0x9009eb1c in abort ()
#2  0x0010f414 in __eprintf ()
#3  0x00098e34 in verify_spirit (spirit=0x11a4720) at src/spirit.c:80
#4  0x0009a154 in spirit_get_flag (spirit=0x11a4720, flag=2) at src/spirit.c:630
#5  0x000437a4 in living_send (self=0x1826200, line=0xbffff3a0 "Junkyard dog looks tired.") at src/living_object.c:4392
#6  0x0004eda8 in living_catch_action (base=0x1826200, sender=0x1828600, message=0xbffff3a0 "Junkyard dog looks tired.")
at src/living_overrides.c:1047
#7  0x000ab20c in virtual_catch_action (self=0x1826200, sender=0x1828600, message=0xbffff3a0 "Junkyard dog looks
tired.") at src/virtuals.c:576
#8  0x0008c9ac in room_catch_action (base=0x11aa8e0, sender=0x1828600, message=0xbffff3a0 "Junkyard dog looks tired.")
at src/room_overrides.c:1214
#9  0x000ab20c in virtual_catch_action (self=0x11aa8e0, sender=0x1828600, message=0xbffff3a0 "Junkyard dog looks
tired.") at src/virtuals.c:576
#10 0x00071810 in smapi_catch_action (receiver=0x11aa8e0, sender=0x1828600, message=0xbffff3a0 "Junkyard dog looks
tired.") at src/plugin_api.c:355
#11 0x01650d0c in pi_activate (event_ref=18425760, virus_data=0x11abef0) at virusattachment.c:338
#12 0x01650634 in plugin_main (instance_data=0x11abef0, event_code=89, event_ref=18425760) at virusattachment.c:107
#13 0x00070a28 in plugin_call_main_routine (plugin=0x1198210, instance_data=0x11abef0, event_code=89,
plugin_event=0x11927a0) at src/plugin.c:473
#14 0x000162c8 in base_send_attachment_event (host=0x1828600, living=0x0, event_code=89) at src/base_object.c:1021
#15 0x000394b0 in living_attachments_update (self=0x1828600) at src/living_object.c:598
#16 0x00054928 in living_compulsory_update (self=0x1828600) at src/living_virtuals.c:622
#17 0x0004c9f4 in living_update (base=0x1828600) at src/living_overrides.c:168
#18 0x000586c0 in monster_update (base=0x1828600) at src/monster_overrides.c:145
#19 0x000a9f90 in virtual_update (self=0x1828600) at src/virtuals.c:198
#20 0x0002d7e8 in update_event_execute (self=0x11abba0, host=0x1828600) at src/event.c:332
#21 0x0002dc48 in event_execute (event=0x11abba0, host=0x1828600) at src/event.c:446
#22 0x00015410 in base_process_events (self=0x1828600, tick=3548) at src/base_object.c:693
#23 0x00092bd4 in process_events (base=0x1828600, tick=3548) at src/server.c:216
#24 0x000f76cc in kg_sorted_set_iterate (sorted_set=0x6062b0, iterator=0x92af8 <process_events>, context=0xddc) at
#25 0x00093ad0 in server_update () at src/server.c:586
#26 0x00095588 in server_event_loop () at src/server.c:1394
#27 0x0004c580 in main (argc=1, argv=0xbffffcdc) at src/main.c:120

* Changed '#if DEBUG_VERSION' to '#ifndef NDEBUG' in the server.

* Check for platform using sysctl() if available instead of using autoconf CANONICAL_HOST, so the platform reported is
the runtime platform not the configure-time platform.

* Modified libkoryn to use automake and libtool.

* Moved src/slashmud_config.h to src/config.h.

* Updated to autoconf 2.59.

* Removed compatibility_layer.h include from files that didn't require it.

* Moved all POSIX and C Standard Library headers to "slashmud_includes.h", where they are included only if the
corresponding autoconf HAVE_FOOBAR_H conditional is true.

* Fixed many warning messages about unused variables.

* [ 85053  196603 2079509] Build 1700.


* Bug fix: incorrectly attempting to remove an attachment from an object's contents when disposed (attachment live in a
separate list, not the contents). (Neil)

* [ 85281  196515 2084503] Build 1674.


* Bug fix: Plugin update routines weren't being called for rooms. (Neil)

* [ 85248  196425 2083561] Build 1672.


* Bug fix: smapi_remove_money_with_change() hadn't been tested.

* [ 85248  196419 2083517] Build 1670.


* Bug fix: living_object.c's remove_money_small() routine wasn't removing coins whose number went to 0 from the living's
purse, causing an infinite loop attempting to remove money.

* Bug fix: living_object.c's money routines had an off-by-one error ('<' instead of '<=').

* Bug fix: remove_money_small() needed to iterate over the currency denominations in descending order, but didn't
(causing strange results when removing money).

* Changed variables shared between threads in networking module to 'volatile'.

* Keyrings now display "Your keyring is empty." when they are empty (instead of "Your keyring contains the following
keys:" with nothing following).

* Added plugin API money routine that automatically provides change: smapi_remove_money_with_change().

* Fixed a bunch of compiler warnings.

* Implemented food_parse_line() and drink_parse_line().

* thing_parse_line() now recognises 'cost' as a synonym for 'value'.

* [ 85249  196422 2083517] Build 1667.


* Bug fix: tell messages weren't being passed to plugin monsters and attachments. (Neil)

* [ 85068  195919 2078792] Build 1651.


* Bug fix: shop contained a double-free.  It was disposing of the name of the associated Room. (Koryn)

* Bug fix: Agent 'create' command couldn't create items after changes to the standard library module. (Koryn)

* Bug fix: Agent 'create' command didn't correctly add items to the invoker. (Koryn)

* Bug fix: 'could not drop item' message hadn't been finished. (Koryn)

* Bug fix: [kThingFlagGettable] For items created and just laying in a room it does not appear that the flag
kThingFlagGettable is being set.  In any case I can not pick them up and neither can the janitor. (Neil)
	- newly created items didn't have their Thing attributes correctly initialised.
	- base_be_picked_up() was incorrectly using base_instance_of() rather than virtual_instance_of(), and
living_can_carry() instead of virtual_can_carry().

* Modified plugin files so the plugins aren't installed by the 'make install' target.

* Added missing files for plugins.

* [ 85043  195846 2078118] Build 1640.


* Bug fix [room plugin updates]: It appears that room object plugins are not being sent "update" events.  From the code
below room_update() expected plugins to get updates but base_update() did not implement it. (Neil)

* Bug fix: Wanderer plugin failed the server self-test. (Koryn)

* Bug fix: SleepSkill plugin failed the server self-test.  It initialised instance data in pi_initialise() instead of
pi_create_instance_data(). (Koryn)

* Bug fix: Mentor plugin failed the server self-test.  It failed to initialise its instance data. (Koryn)

* Bug fix: QuestMaster plugin failed the server self-test.  It attempted to dispose invalid data.  (Koryn)

* Bug fix: Mentor plugin failed the server self-test when adding an initial efficacy to the skill taught by the Mentor.

* Bug fix: QuestMaster in ObjectLibrary/neil_quests attempted to load the plugin 'debug_attachment' instead of
'debugattachment'. (Koryn)

* Bug fix: Mentor plugin didn't handle the case where initial values were found for a non-existent skill. (Koryn)

* Bug fix: Gate plugin didn't correctly parse lines - test for non-NULL string used || instead of &&. (Koryn)

* Bug fix: double-free in the QuestMaster plugin; checked other plugins for the same problem, fixed BulletinBoard.

* Bug fix: Mentor plugin didn't save last item in skill list. (Koryn)

* Bug fix: say/tell/shout commands don't work. (Neil)
	- added commands missing from the parser: say, tell, shout, lock, unlock, time. (Koryn)

* Updated all plugins to use automake.

* Rename C++ source files to end with ".cc" instead of ".cp".  Appears to be required for automake recognition.

* Changed 'pi_parse_line()' to 'mentor_parse_line()' in the Mentor plugin to ease debugging (can now set breakpoints!).

* Modified say, tell, and shout feedback messages for consistency.

* Merged 'category one' and 'category two' commands.

* [ 84972  195735 2076765] Build 1629.


* Implemented global talk list (gTalkList) for talkative monsters.  Non-comment lines in the "Settings/talklist.txt"
file are used by talkative monsters as non-expiring comments.

* Minor fixes to remove compiler warnings.

* [ 84844  195303 2072484] Build 1588.


* Bug fix: living_language_catch_message() wasn't included in the living base virtuals structure.

* Bug fix: uBaseObjectCache was defined in base_object.h instead of base_object.c

* [ 84752  195047 2069821] Build 1576.


* Bug fix: standard_library_load_typed_object() had an error in the way it handled drinks.

* Bug fix: food and drink didn't call the thing_parse_line() routine.

* Cleaned up standard library object loading code.

* [ 84749  195033 2069618] Build 1570.


* Bug fix: time_manager_update() caused an assert when the season rolled over if the calendar had no seasons.

	Program received signal SIGABRT, Aborted.
	0x900429ac in kill ()
	(gdb) bt
	#0  0x900429ac in kill ()
	#1  0x9009eb1c in abort ()
	#2  0x000c6578 in kg_abort () at kg_debugging.c:26
	#3  0x000c6650 in kg_assert_code (b=0, message=0x10dd2c "", filename=0x127964 "kg_dynamic_list.c", linenumber=351)
at kg_debugging.c:66
	#4  0x000c9860 in kg_dynamic_list_get_indexed_item (list=0x405a70, index=1) at kg_dynamic_list.c:351
	#5  0x000d5b54 in kg_list_retrieve (list=0x405a60, index=1) at kg_list.c:658
	#6  0x000a3974 in time_manager_update () at src/time_manager.c:998
	#7  0x0008ccf8 in server_update () at src/server.c:579
	#8  0x0008e7a8 in server_event_loop () at src/server.c:1385
	#9  0x00055b0c in main (argc=1, argv=0xbffffc18) at src/main.c:120

* [ 84730  194999 2069607] Build 1561.


* Bug fix: light counts now work sufficiently well to pass the self-tests.

* Bug fix: array version of a linked list had problems with the add_last() routine (Neil).

* currency_get_money_string() was unimplemented (Neil).

* Added selftest for currencies.

* [ 84728  194994 2069547] Build 1558.


* Bug fix: light count was being verified before rooms were fully constructed.

src/room_overrides.c          , 1601, ERROR   : (room_verify_light_count) incorrect light count in 'nbarenasouth':
mLightCount = 0, sum of contained objects = 1
src/room_overrides.c:1603: failed assertion `sum == self->base_data.mLightCount'

* Bug fix: light count for livings didn't take into account any light-providing body parts:
	- finish_loading() adds the number of full-health light-providing body parts to the light count;
	- when a full-health light-providing body part is injured, the light count is decremented;
	- when an injured light-providing body part recovers, the light count is incremented.

* Bug fix: light count for livings wasn't being added to the room they were loaded into.

* Bug fix: potion self-test had a bug in the quaff test that only showed up in the memdebug version.

* Bug fix: potions didn't call thing_finish_loading() from potion_finish_loading().

* Bug fix: loading objects from the Object Library didn't check for duplicate names (object names must be unique within
a 'kind' of object, e.g. weapons, armours, potions).

* Bug fix: portals were being added to the Object Library in their new_portal_instance() routine (bad).  They're now
added in the finish_loading() routine.

* Bug fix: stopping the foobar_do_command() from a plugin was incomplete (Neil Tiffin).

* Bug fix: infinite loop in player_teleport_{in|out}_room() (Neil Tiffin).

* Added 'stats' Agent command to view some in-game statistics (currently the BasePtr contained weight caching stats).

* Temporarily disabled the verify_light_count() methods.

* [ 84474  194298 2062375] Build 1527.


* Added light counter to the room object.

* Added room_has_light().

* Removed virtual_has_light() from base virtual methods and replaced with virtual_get_light_count().

* Added base_get_current_room(), which returns the current room containing the object (which is not necessarily the

* Added virtual_get_light_count(), which returns 1/0 (according as the object provides light itself) plus the sum of the
_light_count() calls on all contained objects.  Base case is a leaf object which returns 1 (provides light) or 0

* Added room_sunrise() and room_sunset() methods which are called by the time manager as appropriate and
increment/decrement the room's light count.

* Added virtual verify_light_count() method.

* Audited uses of kg_strtobool() to avoid NULL string arguments.

* Split weight into intrinsic weight and contained weight fields.

* Modified 'Torch' plugin to use smapi_increment_light() and smapi_decrement_count().

* Added a test for the 'get' command to the --selftest option.

* Added support for resources (coal, iron, wood, silver, gold, gems, jewels) to rooms.

* [ 84415  194185 2062087] Build 1480.


* Bug fix: 'get' command dereferenced a null pointer when used with the name of a non-existent item. (skips)

* [ 83894  192856 2049552] Build 1452.


* Bug fix: race isn't shown in the score display.
	- fixed display so that the first line is displayed correctly.

* Bug fix: living_get_short_description() was returning early.

* Bug fix: strings in general (and title templates in particular) weren't being correctly parsed in the preferences

* Bug fix: alive-time isn't shown in the score display.
	- revised age code for living objects and ensured it was correct in the score display.

* More work on the title module.

* [ 83894  192854 2049560] Build 1448.



* Tagged CVS as PREVIEW_2_0.

	- slashmudx-preview-2.dmg.gz (10.5MB, MD5 = f55ffe82b19c07fb47431896d60e2f65)
	- slashmudx-preview-2-lite.dmg.gz (3.1MB, MD5 = 48b6044985542a3f50bae54b00d2fa8f)

* Bug fix: logging in using a player with an empty password caused an assert to fire.

* Cosmetic adjustments to the death screen.

* Adjustments to status lines displayed during combat.

* Changed virtual function hashes to use do_checksum() in the utility_procedures module instead of calling kg_adler32()
directly.  This will enable kg_adler32() to be swapped for a less compute intensive checksum (e.g. XOR) at a single

* Added a simple XOR based checksum to be used in the build version of the server.

* Tested adding -pipe option to gcc arguments:

	$ ccache -C && make clean && time make

		real    4m55.907s
		user    2m22.720s
		sys     0m45.790s
without -pipe:
	$ ccache -C && make clean && time make

		real    5m39.622s
		user    2m7.110s
		sys     0m42.070s

* Started on support for titles in the score and short description displays.

* Added memory debugging to kg_array and kg_int array modules.

* Added feedback to the gender and race-selection phases for new characters.

* [ 83752  192498 2046213] Build 1426.


* Bug fix: FreeBSD doesn't appear to have truncf().  Replaced with trunc().

* Bug fix: hpstyle and setgender commands caused a crash when called with no arguments (skips):
	- fixed hpstyle to display options when called with no argument.
	- removed setgender.  It really should be an option for when a player first logs in.

* Bug fix: alive-time is sometimes duplicated in the score display:
* Bug fix: creature targeting isn't shown in the score display:
	- the alive-time buffer was wrongly being displayed twice.

* Bug fix: start_room might not be successfully located when a player dies.

* Bug fix: zones weren't correctly handling flags, including "light true".

* Added gender selection phase to creating a new player.

* Cosmetic fixes to examining other creatures.

* [ 83624  192042 2042020] Build 1406.


* Bug fix: entries in the general log that contained unnecessary blank lines (skips).

* Bug fix: by default, the server started with logging disabled (skips).

* Bug fix: disabled talk list.

* Bug fix: when a player died, an assert fired if the race had no restart room.

* [ 83604  191922 2041184] Build 1395.


* Bug fix: the move command was displayed as 'unknown command' when echoed back to players.

* Bug fix: the note_ptrs() routines weren't noting memory from the time_manager module.

* Bug fix: base_examination() was still treating the attachments list as an iterator list.

* Bug fix: group combat selftest wasn't working correctly with a multiplier greater than 1.

* The build version of the server no longer echoes commands back to players.

* There's now a 'movement' command that toggles the movement feedback string on and off.

* Turned 'nasty' mode for memory debugging subsystem off by default since there are still valid allocations that need to
be tracked down.

* Added an undocumented '--nasty' command-line option that turns on the nasty mode for the memory debugging subsystem.

* [ 83552  191797 2040187] Build 1387.


* Bug fix: attachments weren't setting their environment to NULL before detaching.

* Bug fix: attachment list was being disposed twice when a base_object removed all attachments in finished() routine.

* Bug fix: the group combat selftest failed to notify monsters when their target had been killed and disposed of.

* Bug fix: the single combat selftest now has a 30 second timeout for each bout.  If the timer expires, the bout is
declared a draw.

* Bug fix: the group combat selftest now has a 120 second timeout.  If the timer expires without a death, all remaining
monsters are joint winners.

* Bug fix: the memory debugging routine that cleared the referenced flag didn't update the header checksum.

* Bug fix: LivingObjects were being added to the updateable list (e.g. sneezer) when an attachment wanted to be
registered for updates.  The [un]register_for_updates() routines are now virtual, with the LivingPtr implementation of
these routines doing nothing.  The [un]register_for_plugin_updates() routines are also virtual, with the LivingPtr
implementation of these routines adding plugin_update events to the event queue but not adding the object to the
updateable list.

* Renamed 'virus' to 'virusattachment' in the ObjectLibrary/standard_attachments file.

* Added 'luck' stat.

* Added a --crash-report command-line option that logs CVS headers, plugin information, and version numbers ready for

* Added standard_library_display_accesses() routine to standard_library module.

* Added an attachment-loading test to the selftest module.

* The combat selftests now ensure all monsters are in a visible state.

* Cleaned up logging module to use LogPtrs instead of a mix of FILE*s and LogPtrs.

* Added --loglevel command-line option to set the logging level.

* Selftest comparison (with single combat test off) in default configuration:

real    16m4.169s
user    7m31.810s
sys     2m2.950s

real    11m24.300s
user    5m21.000s
sys     2m1.970s

real    1m27.738s
user    0m20.380s
sys     0m4.140s

* [ 83453  191559 2037496] Build 1372.


* Bug fix: rooms and zones weren't setting their height, which was causing problems when characters with non-zero height
attempted to move around a room with zero height (

* Bug fix: standard_object_processor.c contained "begin-attachment " instead of "begin-attachment"

* Bug fix: rooms weren't responding to the same number of flags that zones were.

* Fixed ammunition line-parsing warning with blank lines (

* [ 82881  189863 2020713] Build 1305.


* Bug fix: mBodyHitChanceSum wasn't being set for new players (living_finish_loading() wasn't being called).

* The networking module now displays a message when it begins to listen for connections.

* [  82714  189493 2017211] Build 1294.


* Fixed inconsistency between zone and ammunition logging of unknown lines.

* Server now exits if it could not bind() or listen() on the network socket.

* [  82706  189445 2016889] Build 1291.


* Updated kg_logging so that LogPtr objects automatically rollover and create gzipped backups when they hit a limiting

* Converted slashmud logging module to use kg_logging instead of reimplementing features.

* [  82694  189413 2016585] Build 1288.


* Added caching of most recent time string conversion and CalendarState creation to time_manager module.  Appears to
provide 10-20% improvement.

	if seconds == last_seconds && hash == last_hash && string == last_string
		return last_string

* Implemented self-test for potions that checks opening, sipping, tasting and quaffing.

* Implemented potion sip loading (was missing for some reason).

* Added new plugin event: kPluginQueryInfo.  The desired response is a ListPtr containing strings allocated by
smapi_get_string() describing the name, version, build (memdebug, debug or build), authors and other human-readable
information about the plugin.

* [  82743  189372 2017074] Build 1277.


* Rewrote alignment checking code used when a kill is made.

* Fixed incorrect preferences on startup:

	unrecognised preference 'current-clock'
	unrecognised preference 'no-hitpoints-means-dead'
	unrecognised preference 'default-wimpy'
	unrecognised preference 'default-recover-item-chance'
	unrecognised preference 'player-timeout-seconds'
	unrecognised preference 'attack-missed-message'
	unrecognised preference 'attack-absorbed-message'
	unrecognised preference 'attack-damaged-message'
	unrecognised preference 'attack-injured-message'
	unrecognised preference 'attack-killed-message'
	unrecognised preference 'reference-counted-strings'
	unrecognised preference 'soft-memory-limit'
	unrecognised preference 'hard-memory-limit'
	unrecognised preference 'save-file-buffer'

* Finished initial port of time_manager module.

* Modified time_manager module to read calendar file: "Settings/calendar.conf".

* Added configurable format strings to time_manager module.

* Added calendar self-test to the --selftest command-line option.

* [  82197  188064 2002544] Build 1240.


* Bug fix: keys, portals and potions weren't returned by standard_library_load_named_object().

* Bug fix: the keyword 'worn' without a true/false value caused a crash when loading some armours.

* Bug fix: the plugin_event_set_textline() caused a memory leak.

* Bug fix: rooms weren't disposing of their mPluginData.

* Bug fix: Mentor wasn't correctly dealing to mentor-currency strings.

* Bug fix: plugin_dispose() was setting the magic number to zero before the plugin was finished sending events.

* Bug fix: zone_parse_line() was storing an automatic variable in the long description set.

* Bug fix: if a room had a 'zone non_existent_zone' line in the area file then it ended up with no zone.

* Bug fix: there was no zone called 'default' in the Zones directory.

* Bug fix: room_finished() was disposing the room's Zone.

* Bug fix: cut and paste bug in Janitor.

* Bug fix: spouter wasn't dealing with strings correctly.

* Bug fix: reading in the preferences was using an uninitialized buffer.

* Bug fix: portals and potions weren't correctly initializing their data (using sizeof(FooInstance) instead of

* Bug fix: preferences manager wasn't correctly dealing with preference file lines.

* Bug fix: Cell plugin was using StandardTextPtrs it hadn't allocated.

* Bug fix: ammoboxes were inconsistently treated as 'ammo-box' and 'ammobox': standardised on 'ammobox'.

* Bug fix: Janitor was calling smapi_wear() and smapi_wield() with incorrect parameters.

* Bug fix: rooms weren't retaining flags set with room_set_flag().

* Fixed linker flag to stop unreferenced symbols being stripped (used to be -all-load, now -all_load).

* Fixed permission problems with log files.

* Portals now correctly install an update event.

* Added --selftest flag and rudimentary self-test code that loads all ammoboxes, armours, drinks, foods, keys, monsters,
portals, potions, rooms and weapons.

* Changed plugin loading so that slashmudx.memdebug only loads * plugins, slashmudx.debug only loads
* plugins and slashmudx only loads *.so plugins.

* Modified plugin Makefiles to have a memdebug target.

* Modified plugins to use KG_XALLOCATE() instead of kg_xallocate_ptr() so the memdebug target is correct.

* Tidied up room_finished() -- lots of duplicate code because it wasn't calling base_finished().

* Tightened up memory verification system - pointers are verified when they are noted.

* Monsters now install a default name (equal to their standard name) in finish_loading().

* Removed unnecessary monster_check_target() routine.

* Removed logging from base_get_flag() and base_has_light(), as they were too verbose.

* Finished single combat and group combat self tests.

* Miscellaneous fixes for Linux compatibility.

* [  81192  185296 1974281] Build 1205.


* Implemented the --background flag that puts the server into daemon mode.

* Implemented the --port flag that sets the listening port.

* Finished implementing portals.

* [  79952  182054 1942967] Build 1077.


* Added lockfile to world directory to prevent two copies interfering with each other.

* Implemented world directory command-line option.

* Removed extraneous -O2 from CFLAGS in configure script.

* [  79312  180511 1925973] Build 1046.


* Canonical host is now displayed in the login message.

* Added common command-line arguments.

* Improved autotools configuration.

* [  79231  180272 1923506] Build 1035.


* Added note_ptr routine for portals.

* Converted build process to use GNU autotools.

* [  78788  178634 1911514] Build 1008.


* Added note_ptr routines for attachments and potions.

* Finished porting potion objects.

* [  78788  178634 1911512] Build 1007.


* Bug fix: object ids should be coloured yellow in the room view for Agents.

* Bug fix: corpses had a memory leak (the mCreatureName field was assigned twice when the corpse was initialized).

* Added routines to note all memory allocations in monster_object, player_object, corpse_object, door_object and

* Locate memory allocations after a player has logged in: all allocations are now accounted for.

* [  78254  177478 1899716] Build 1001.


* Added routines to note all memory allocations in living_object.

* [  77981  176993 1894068] Build 998.


* Adding support for memory debugging routines.  1452 allocations left to locate.

* Added hash table note_ptr iterator as a method; base_mud_manager_note_ptrs calls it automatically.

* Track down networking allocations (new connection queue, established connection queue, spirits).

* Tracked down ammunition allocations.

* Tracked down armourtype allocations.

* Tracked down clan allocations.

* Tracked down currency allocations.

* Tracked down mood allocations.

* Tracked down plugin allocations.

* Tracked down social allocations.

* Tracked down weapontype allocations.

* Tracked down zone allocations.

* 4 allocations remain: 3 are plugin string allocations, 1 is waiting for an accept() to complete at src/networking.c:

* Added "-std=c99 -pedantic" to libkoryn Mac OS X makefile.

* [  77275  175924 1879713] Build 993.


* Bug fix: load_standard_objects logfile was going to the wrong folder.

* Removed command_virtuals module (was never used).

* Added support for memory debugging routines.  5627 allocations left to locate.

* [  76324  174290 1860144] Build 979.


* Bug fix: base_install_plugin() didn't check to see if the Plugin Manager returned a NULL plugin.

* Bug fix: in base_install_plugin(), the plugin instance data wasn't being extracted before the plugin event was

* Bug fix: plugin events asserted when a non-null string was stored in the textline, token or remainder.

* Plugin names are now compared in a case-insensitive way.

* [  75644  173211 1843446] Build 944.


* Fixed a couple of uninitialized variable warnings.

* [  75587  173064 1841879] Build 934.


* Bug fix: commands weren't passed to unwielded and unworn inventory items.

* [  75586  173059 1841840] Build 933.


* Bug fix: attachments didn't send the kPluginCreateInstanceData event.

* Implemented plugin loading for attachments, monsters, rooms, things and weapons.

* [  75599  173105 1842371] Build 929.


* Bug fix: quit command causes an EXC_BAD_ACCESS signal - the spirit should not be disposed until after the player has
been saved.
	- player saving has been moved to occur before the spirit is detached.

* Bug fix: numerous Living and Agent commands didn't check to see if the remainder argument was non-null before using

* Bug fix: items stored in a player file using 'begin-armour' instead of 'include-armour' do not load correctly.
	- one of the loading routines was checking for 'include-armour' instead of 'begin-armour', after the line had
already been checked for 'begin-armour'.
	- standard_library_instantiate_object() wasn't correctly responding to both 'begin-foobar' and 'include-foobar'.

* Bug fix: loading a stat effect caused a crash.
	- stat effects no longer verify before loading.

* Bug fix: items are not reloaded when saving and then logging in.
	- items that did not have an Object Library 'name' were not saved.
	- the initial Object Library name was not preserved with the object.

* Implemented stat effects.

* [  75462  172919 1839773] Build 926.


* Bug fix: living_load_within_standard_text() didn't check for a NULL strtok() result.

* Bug fix: purses did not display, because purse_add_to_contents() was unimplemented.

* Bug fix: recover-chance was being saved as 0, because thing_append_properties_to_save_text() was saving the
RecoverChance effect rather than the recover chance itself.

* Bug fix: Agent and living 'clan' commands caused an EXC_BAD_ACCESS signal.

* Added -std=c99 and -pedantic to compilation flags.  Fixed errors reported by -pedantic.

* Skills are now correctly saved.

* Purse contents are now correctly saved.

* [  75298  172596 1836099] Build 900.


* Bug fix: denominations were not being correctly loaded in currency_init().

* Bug fix: denominations were being overly zealous and insisting that the alias field be set: they now tolerate a NULL
alias and return the mName if a non-existent alias is asked for.

* Bug fix: player files containing blank lines caused an EXC_BAD_ACCESS signal, whether used or not.

* Bug fix: 'purse' command caused an EXC_BAD_ACCESS signal if invoked by an Agent without an explicit target.

* Bug fix: body-parts were being saved with their maximum structure and current structure instead of just the current

* Skills are now saved.

* Denominations can now be retrieved using currency_manager_get_denomination_by_name().

* [  75271  172457 1834920] Build 880.


* Bug fix: ensured wimpy value was treated as an int rather than an unsigned int.

* Bug fix: player file saving routine was using an uninitialised variable value.

* 'score' command now displays total points as well as points available to spend.

* Implemented coins objects.  Untested.

* Implemented saving for skill states.  Untested.

* [  75165  172237 1832725] Build 874.


* Bug fix: living_set_natural_stat() creatures belonging to a race that had no maximum limit on a particular stat had
that stat set to 0.

* Bug fix: weapons and armours now save their damage and protection values.

* Improved date display in saved Player/Agent files and in the connection message.

* [  75007  171851 1827595] Build 853.


* Bug fix: rooms with no short description caused a crash when attempting to sending the short description line.

* Bug fix: all rooms were being updated every tick, not just rooms that have an event.  Added an 'active room set' to
the room manager that tracks which rooms need to have their event processing routine called.

* Bug fix: teleporting to a non-existent room caused a crash, because the room loading routine was not returning NULL.

* Added support for weight in grams.  The 'weight' keyword specifies a weight in 500 gram units, while the
'weight-grams' keyword specifies a weight in grams.

* Audited use of kg_set_items().  Found a couple of bugs and many inefficiencies.

* [  74915  171540 1824462] Build 837.


* Fixed bug in server related to handling plugins that register events.

* Ensured all plugins are sufficiently correct to handle the kPluginInitialise and kPluginRegisterEvents event codes
without crashing.

* [  74782  171129 1820478] Build 827.


* Updated Plugin Makefiles to include -DNDEBUG.

* Fixed AdvancementStone and BandageBox pi_initialise() routines.

* Miscellaneous other fixes to plugins.

* Cleaned up plugin server code so that the instance data is stored in the plugin's BasePtr, not in the PluginPtr.  This
allows the Plugin to act as a template for all instances with regard to events accepted.

* [  74757  171042 1819806] Build 821.



* Tagged CVS as PREVIEW_1_0

* Build 807. MD5 (SlashmudX_preview_1.dmg.gz) = 38b994c79c5e8f7ef0d8aaa15cc5f083

* Work on plugin support:
	- activated hooks in the server.
	- simplified the mud_manager plugin code to have a single plugin manager.
	- updated all plugins with correct prototype for plugin_main() and made changes to ensure they compile.

* [  74749  170972 1818036] Build 816.


* Bug fix: 'shutdown' command crashes if no time is given.
	- added code to set default shutdown time if none is given.

* Bug fix: Agent display of damage and protection values was out of date.

* Implemented Armageddon object and shutdown code.

* Implemented server_catch_tell() and friends.

* [  74564  170593 1813823] Build 807.


* Bug fix: death message is not being displayed.
	- it is when the Agent 'zap' command is used to kill a monster.
	- created living_report_death() message that now does this.

* Bug fix: the shape command with the descriptive HP style didn't reset the colour to ANSI_NORMAL.

* The "Extras/connect_message" file, if it exists, is sent to the player upon login (except for those lines that begin
with '#' or '%').

* Disable weapon breakage.

* Rewrote the combat system to make it a little simpler.

* Removed the test_object_hierarchy module since it has now served its purpose.

* Cleaned up living_attack_natural_weapon() to take a BodyPartTemplatePtr for the natural weapon part rather than an

* Implement line-break-point in spirit.c.

* Files: Makefile.* TODO STATUS src

* [  74478  170345 1810536] Build 798.


* Bug fix: removing a second updateable from the updateable manager fails to work.
	- hash key in the updateable manager hash table was the mStandardName, so objects with the same mStandardName could
not be distinguished.  Changed the updateable manager to use the ptr value as a hash key, and changed the base_hash()
routine to use object ID as the default hash scheme.

* Bug fix: examining a Thing resulted in an inappropriate "You must have certain alignment to use this ..." message.
	- the level requirements were checked against INT_MIN and INT_MAX instead of 0 and UINT_MAX.

* Bug fix: examine command does not work (as 'examine' or 'exa').
	- doesn't appear to be checking the alias field.
	- base_match_alias was broken.
	- seems to be a problem with corpses (don't respond to 'bones', 'remains' or 'corpse').
	- base_get_nth_contained_item() was incorrectly using base_foo() routines instead of virtual_foo() routines.

* Added code to turn 'examine room' into an alias for 'look'.

* Server uptime is now displayed.

* [  74963  171539 1825395] Build 770.


* Bug fix: corpses were causing an assert in the event queue processing loop when they disappeared.
	- added an object disposal list to the server so that objects aren't destroyed in the event queue processing loop.

* Bug fix: cannot login again once a player has quit.
	- players weren't being removed from the table of active players.

* Thing breakage has been disabled for now.

* [  74815  171259 1822017]


* Bug fix: advance_beyond_object() had the strstr() call parameters round the wrong way.

* Bug fix: 'wield all' command ended up being a 'wear all' command.

* Bug fix: weapons incorrectly modified the kThingFlagWorn flag instead of kThingFlagWielded, meaning they did not
correctly auto-equip.

* Bug fix: damage messages were always returning the message for the least amount of damage.

* Bug fix: there was a bug in the callback routine for cleaning out references to a dead living in the mud_manager

* Bug fix: mud_manager_verify_object() was unimplemented.

* Bug fix: new player races weren't displaying because none were player races.

* Bug fix: weapons don't provide a damage message when used to attack.
	- fixed living_report_weapon_damage() routines.

* Bug fix: loaded armours don't offer any protection.
	- the maximum excess was being set incorrectly in thing_finish_loading().

* Bug fix: damage messages now use the part template's description rather than the name.

* [  74151  168083 1789178]


* When loading, distinguish between begin-object and include-object.  "include-object" is for references to items in the
standard library, possible with overriding lines in the area file.  "begin-object" is for items that have been saved
completely in the area file and do not need to load from the standard library.

* monster_finish_loading() now logs a NOTICE message instead of assert'ing when a monster has no race.

* living_set_natural_stat() only checks racial stat maximums if the monster has a race (it may not while it is loading).

* Bug fix: object loading was advancing past the 'end-object' line twice instead of once, causing every second object to
be missed.

* Bug fix: 'eq', 'equip' and 'equipment' commands were missing from category_two_commands.txt.

* Added Agent 'test' commands.

* Bug fix: agent_parse_category_one_command() was not called because the player overrides overwrote the agent overrides.

* Bug fix: monsters weren't having their standard events installed.

* Bug fix: when attacking, the weapontype name was being used instead of the body part name and so the race couldn't
find the correct body part template.

* Bug fix: Agents had their update events installed with an offset rather than an absolute server tick.

* living_finish_loading now correctly initializes the healthy and injured body part sets.

* Bug fix: Damage message sets were attempting to retrieve messages from empty sets instead of returning NULL.

* Living body parts are now either healthy (100%) or injured (otherwise).  Unusable body parts have negative structure

* [  74094  167869 1787198]


* Minor changes relating to object loading.

* Simplified the object loading "load_within_standard_text()" and "parse_line()" routines.

* Cosmetic changes to the output of the score command.

* [  74008  167620 1784718]


* Move command seems to (approximately) work.

* Bug fix: begin_display() was not displaying the '---+' after the title.

* Bug fix: damage_message_set.c wasn't using kg_set correctly.

* Tested: inventory command - changed parser to recognise 'inventory' (without object id).

* Many changes to command parsing in the slashlex module and the slashmudx source.  Mainly to rationalize the parsing
and ensure commands work.

* Refactored 'quit' command code.

* [  73735  166631 1776973]


* Added gperf generated files for category one and two Agent commands.

* Saving players now correctly creates the player's file.

* Bug fix: events were not firing correctly - they were stored largest first in the binary heap.

* [  73735  166631 1776973]


* Implemented move commands.

* Fixed problems with sending lines to the client.

* Refactored spirit.c sending routines.

* Fixed bugs that prevented operation up to displaying the start room.

* [  73369  164731 1765406]


* Added generation tag to clans and clan_state so that when clans are purged, players who were offline get removed too.

* Eliminated kAnsiForeYellow etc in favour of ANSI_FORE_YELLOW.

* Changed all direct access to living_data.mLevel to go through accessor in preparation for future changes.

* Added gperf routines for standard library parsing.

* Consolidated the attack status and damage code constants (now called kDamageCodeFoobar).

* Renamed smapi_set_level() to smapi_set_all_stats().

* Added dynamic loading code to plugin.c.

* Added dynamic loading support flags to Makefile.linux.

* [  73038  163735 1757999]


* Bug fix: player_manager_iterate(), living_manager_iterate() needed to return real PlayerPtrs instead of hash table

* Bug fix: loading inclusions didn't work.

* Added more logging code.  foobar_load_within_standard_text() now logs each line in the standard_text object.

* Working on successfully loading players (virtual_load_inclusion() in particular).

* Audited parse_line() procedures for correct parsing of attributes that use the remainder of the line (name, short,
long etc.).

* Removed virtual_process_events() and virtual_get_next_event().

* Added base_process_events() and base_get_next_event().

* Added signal handlers that display game and server resource statistics.

* Bug fix: player_parse_line() wasn't calling living_parse_line() if the line consisted of more than a single token.

* [  73322  163446 1761701]


* Added: plugin_event_private.h

* Started work on the Plugin API.

* Finished first implementation of the Plugin API.

* Audited uses of kg_list_items() and kg_dispose_ptr() in plugins.

* Ensured my email address was consistently given as ''

* [  72372  161363 1735241]


* [  70406  158316 1701732] Started work on the Plugin API.


* Changed clan loading to a 2-stage process, since they can refer to other clans via the feud and ally features.

* Finished clan_state module.

* [  70791  159158 1711077] Finished porting SMClan.


* Cleaned up kg_random module.

* removed:	buffer_sizes.c

* moved: 	slashlex.y to parser.y to
			slashlex.l to scanner.l
			slashlex.c to scanner.c
			current_areas.[ch] to areas.[ch]

* Changes to allow the server to compile on Linux.

* Added Makefile.linux.

* Added:	learnable_skill.[ch]

* Finished porting SMClan up to DoRoster().

* [  70276  157867 1696458] Finished porting SMClan up to DoPromote().


* Changed KG_ASSERT to assert() where possible.

* Added associations between sockets and Spirits.

* Fixed start-up problems.

* Bug fix: wrong structure size for PlayerManager checksum in mud_manager.c/initialise_mud_managers().

* Bug fix: race_parse_line() was using wrong buffer for tokenizing.

* Bug fix: race_init() was using wrong buffer for tokenizing.

* Bug fix: body_part_template.c was verifying the body part while it was being constructed.

* Added replace_string() to string_manager for replacing a string, disposing of any current string.

* KG_ASSERT_PTR now only checks to see that the pointer is valid.  Introduced a new assertion, KG_ASSERT_REAL_PTR, that
checks to see that the given pointer is valid dynamically allocated memory.

* Body parts now use their part name if no explicit description is given.

* Changed preferences format to be

name = "value"

* Cleaned up mud_managers.c so that managers which read their objects once at startup (clans, classes, races etc) use a
common format for the hash table records.

* Bug fix: player_manager wasn't reading both Players and Agents directories.

* Bug fix: player_manager now correctly parses player/agent files.

* Bug fix: kg_set had an off-by-one bug when checking set item indices (they're zero-based internally but one-based

* Bug fix: clan state wasn't allowed to have a NULL clan; it can now exist as an "orphaned" clan state.

* Added clan state parsing routine.

* Added skill state parsing routine.

* Added correct base_data.mType values to objects derived from BaseObject.

* Renamed bison files to "parser.*" and flex files to "scanner.*" to make their names less confusing.

* Added MudObjectHashPtr memory pool for mud_manager module.

* Ensured that managers with names as unique keys use common mud_object() routines.

* Ensured that managers that only store live objects (living manager, player manager, updateable manager) use
appropriate non-mud_object() routines.

* Simplified kg_random interface.

* [  69719  156363 1680522] .


* Added gender accessor to Plugin API.

* [  68273  152886 1659148] Finished porting SMWeapon.


* Added enumerated type for living state constants to Plugin API.

* [  68273  152886 1659148] Finished SMWeapon up to GetDamageMessages().


* [  68209  152778 1657639] Finished SMWeapon up to WeaponSpecialAttack().


* Moved stat tags, size tags and gender tags to enums.

* Added Plugin API for saving via ListPtr.

* Cleaned up thing_object effects and requirements.

* [  66656  148743 1613026] Finished SMArmour.


* Finished SMRace.

* Added Plugin API calls to deal with invisibility.

* Moved wear, wield, remove, unwield and break messages from ArmourPtr and WeaponPtr to ThingPtr.

* [  66456  148537 1609084] Finished SMArmour up to FinishLoading().


* Files:
	- moved body_part_type.[ch] to body_part_template.[ch]

* Finished SMBody (body.c and body_part_state.c).

* [  66121  147734 1600214] Finished body_part_template.


* Added doxygen.config file for auto-generating documentation using doxygen.

* Finished SMLivingCommands.

* [  64326  143136 1552577] Finished SMAgentCommands.


* Files to add:


* Finished porting SMLivingState.

* Cleaned up slashlex further.

* Finished porting SMCommand.

* Moved command_parse_table.[ch] to command_table.[ch].  Suspect it is completely unnecessary (used for parsing before

* Improved slashlex parser.  It no longer allocates memory for SlashlexObjects ({name, ordinal} combinations), using
static storage while parsing and storage in the SlashlexCommand structure when done.

* created file containing indent options:

	indent -l400 -bad -bap -bl -bli0 -bls -cbi0 -cli2 -cs -di1 -fc1 -i4 -npcs -nsob -psl -ts4 -ut

This requires indent-2.2.9 since the version that comes with Mac OS X is old.

* Use gperf to generate lookup functions for category one commands (those with no in-game effect):

	1) Ensure category_one_commands.txt is up-to-date.
	2) Run gperf:
gperf --language=ANSI-C --readonly-tables --hash-fn-name=hash_category_one_command
--lookup-fn-name=is_category_one_command --random --enum --compare-strlen --debug category_one_commands.txt 1>
category_one_commands.c 2> category_one_commands.log

	3) [Optional] run indent on the "category_one_commands.c" file.
	4) Copy contents of "category_one_commands.c" to "living_virtuals.c".

* Use gperf to generate lookup functions for category two commands (those that use the slashlex parser):

	1) Ensure category_two_commands.txt is up-to-date.
	2) Run gperf:
gperf -D --language=ANSI-C --readonly-tables --hash-fn-name=hash_category_two_command
--lookup-fn-name=is_category_two_command --random --enum --compare-strlen --debug category_two_commands.txt 1>
category_two_commands.c 2> category_two_commands.log

	3) [Optional] run indent on the "category_two_commands.c" file.
	4) Copy contents of "category_two_commands.c" to "living_virtuals.c".

* [  62079  136683 1484646] Finished SMLivingCommands up to 'remove' command.


* [  60655  131677 1441856] Added macros for assertions that automatically fill in __FILE__, __func__, __LINE__.


* [  60902  133014 1458023] Removed unnecessary files, converted more groups of constants to enumerated types.


* [  61408  134390 1470840] Finished SMZone.


* [  61159  137242 1487993] Finished SMCurrency.


* Working on agent_command_manager and command_manager

* Refactor initialisation tasks into:
	- one-shot/hard: those performed once only at process startup (e.g. virtual tables).
	- repetitive/soft: performed on startup and restart.
* Refactor shutdown tasks into:
	- one-shot/hard: those performed once only at process exit.
	- repetitive/soft: performed on shutdown and restart.
The model is:

	PROCESS STARTUP - hard_init() - { soft_init() -RESTART/SHUTDOWN- soft_exit() }+ - hard_exit() - PROCESS EXIT

* Move get_type routines from foobar_overrides.c to foobar_object.c.

* base_finished() completed.

* Working on base_virtuals.c: up to base_update().
	- need plugin_event.[ch] with PluginEventPtr, new_plugin_event(), dispose_plugin_event(), with free list.
	- need attachment_send_event routine, possibly static in base_virtuals.c.

* Finished SMBase.p.

* [   44706   93583 1033377] Finished SMLiving.p:LivingObject.Initialise().

* Tested replace_single_token().

* [   48092  102887 1131784] Finished up to SMLiving.p:LivingObject.AppendToSaveText().

* [   48111  103232 1134914] Finished up to SMLiving.p:LivingObject.Examination().

* [   50798  109971 1205195] Finished up to SMLiving.p:LivingObject.HasMoney().

* [   52195  113953 1245376] Finished up to SMLiving.p:LivingObject.DoRifle().

* [   52870  115703 1262967] Finished SMLiving.p.

* [   53805  117856 1286126] Finished up to MonsterObject.AppendPropertiesToSaveText().

* [   55000  120867 1318717] Finished up to RoomObject.AppendToSaveText().

* [   55187  121312 1323595] Finished up to RoomObject.AddToContents().

* [   57033  126636 1380255] Finished SMRoom.p.

* [   57601  128191 1396494] Finished up to PlayerObject.ParseLine().

* Replaced all fprintf(stdout, "foobar()"); calls with SLASHLOG_DEBUG calls.

* [   57935  129057 1402488] Finished SMPlayer.

* [   58419  130439 1416881] Finished SMThing.

* [   58477  130556 1418162] Finished up to FollowEventObject.Execute().

* Added auto-incrementing build numbers.

* Finished SMEvent.

* Finished SMBase.

* [   58813  131332 1426183] 1.0 build 28: Finished up to AgentObject.AppendPropertiesToSaveText().

* [   59230  132407 1437120] Finished SMAgent.

* [   59230  132407 1437120] Finished SMSpirit.

* [   59841  134225 1454417] 1.0 build 82: Finished up to LivingManager.RemoveLiving().

* [   59946  134446 1456738] Finished SMLivingManager.

* [   59946  134446 1456738] Finished up to PlayerManager.GetLocalPlayer().

* [   60221  135110 1464790] Finished SMPlayerManager.

* Added signal handler for SIGPIPE.

* Added spellpoints for rooms.  These regenerate according to the number of occupants.

* Added initiative stat: each tick - grab all living events that are scheduled to run
	- sort them in initiative order.
	- execute them.

* Finished working on mud managers.

* Finished SMCorpse up to CorpseObject_Update().

* [  61159  137242 1487993] Finished SMCorpse.


Check the CSS on this page. This page was last built on Mac OS X with BBEdit on 20 April 2008. Check the HTML on this page.

Powered By Darwin