This is the changes log for LPMud 3.0-DR. I strongly suggest that you read the DONE file, located in the same directory, for changes to the base verison of LPMud 3.0, as this file is -DR specific. Fixes in 3.0.26-DR Please read the DONE file for changes that are for 3.0.26. Fix a major memory leak with the F_ADD instruction. Fixed a small bug, which would make this_verb() return and incorrect value. Fixes in 3.0.28-DR to 3.0.30-DR Read the DONE file for new features to 3.0.28 to 3.0.30. Fixed, or reprogrammed, the shadow implementation to be much more stable. There was a bug that could potentially crash the game, if you shadowed something with an shadow that defined an init(). This has not been fully tested as "safe", so if you are weary of crashing your mud, don't use shadows with inits(). Added portability for a NeXT. Please read the Makefile for more information on how to configure it to these machines. Fixed a memory leak in ed, which now makes 'x' free it's buffer. Fixes in 3.0.31-DR to 3.0.33-DR Please read the DONE file for changes from 3.0.31 to 3.0.33. Fixed the search command in ed, to start on the next (or previous) line. Restricted shadow, such that shadowing objects cannot be moved, and an object cannot shadow if it has an environment. Shadows are destructed when the object they are shadowing is destructed, so there no potential memory leak here. Fixed a bug with shadowing, which caused the player to get no output if the player.c object has a catch_tell defined, and they were being shadowed. Also, catch_tell is now called on player.c with all messages but the notify_fail strings. added deletea(array, index[, endindex]) to delete element index, or if endindex is given, the range of elements index thru endindex, from array. Fully overloaded - on arrays (-= also works). If you do array - anytype it removes the first occurance of anytype from array. If 'anytype' is an array, it removes the first occurance of each element of anytype from array, and returns the resultant array. Please note: the elements MUST be identical, in that they must be the same number, object, string, or vector. The expression: ({ ({1, 2, 3}) }) - ({ ({1, 2, 3}) }) although the first element of each outer array (which is the array ({1, 2, 3}) ) are arrays of the same size and elements, these are NOT the same arrays, and the result of the above subtraction would be ({ ({1, 2, 3}) }) (the elements would have to point to the same physical array for these to be equal) Fixes in version 3.0.34-DR Please read the DONE file for version 34 changes. Fixed an annoying bug that disabled write() during login. However, this "fix" encompassed taking out the calls to catch_tell on player objects. I am working on a more elegant solution. Fixes to version 3.0.37-DR Please read the DONE file for versions 35-37 changes. Many bugs related to not running in compatibility mode have been fixed. Soon, when I get the chance to check out the new fixes, functions will be able to return dual types, instead of only one type (one of those types being TYPE_ANY). This will allow things like: int i; i = extract(blah, blah); to be flagged as an error. This, now, is not an error, I think, since the return type of extract() is TYPE_ANY. (this is only an issue with type-checking) Ed has been made 'snoopable', by outputting lines instead of characters at a time. reset() has deviated from Lars' reset scheme slightly. If an object is past due for a reset, and is referenced, then it will reset immediately, instead of the next "reset cycle". Also, if it's not past due, it will reset next reset, like normal. Fixes to version 3.0.37-DR and 3.0.39-DR Please read the DONE file for changes in version 37 and 39. The typing system has been totally recoded, to allow for multiple return types from efuns. This, unfortunately, has made it so that I get to rewrite lars' make_efun.y to reflect these changes, and as a result, I haven't incorporated that new feature into the source distribution. He basically took my idea with the efuns.i file, and made a readable way to generate that file. I don't know if I will add this to the source or not, as I am still debating that. Fixed a bug in +=, which would crash the game if yo uadded a string to a number (number += string). Fixed a bug with error(), which could potentially crash the game. Added #define's for the full message, the prompt, and for if find_living can return non-idable objects. Fixed some potential too-long evals associated with the reset scheme. Fixes to version 3.0.39-DR and 3.0.41-DR Please read the DONE file for changes in version 40 and 41. Fixed a potential bug with return 0 from verbs, that could crash the game. Fixes to version 3.0.41-DR-1.1 Reluctantly took out the new type checking system until I can get the time to look at it to fix a bug. Please read the DONE file for information on the varargs qualifier, as well as how types are checked on EVERY argument to an efun, now. The type checking is identical to Lars' 3.0. I also fixed some problems with return types of efuns. This version will compile lars mudlib.n, if you change all the read_file calls to implode(grab_file(filename), "\n") You can put the following macro at the top of any file that has read_file: #define read_file(x) implode(grab_file(x), "\n") and it will compile fine. Fixes to version 3.0.42-DR Please read the DONE file for changes to version 42. Fixed some portability bugs. This was mainly just moving header files around... There are probably still some problems porting. This version is known, by me, to port to a Sun3, a Sparc, and HPUX. Created master.h, which defines mudlib paths pertaining to create_wizard, and modified master.c accordingly. Added back Lars' output buffering scheme. Hopefully it'll work this time. Fixes to version 3.0.43-DR and 3.0.44-DR Please read the DONE file for changes to version 43 and 44. Remember to move master.c into your object directory. Fixed the ls / bug. Fixed a bug with ed, which made / and ? skip the next line, and started it's search two lines from the current one. A switch statement has been implemented, which is identical to the C switch statement. However, if you have variables named 'switch', 'case', or 'default', you'll get syntax errors. Also, don't 'return' from a switch case. It'll crash the game. (hopefully this'll be fixed soon). Fixes to version 3.0.45-DR Please read the DONE file for changes to version 45 Fixed a small bug that could crash the game, if you got a compiler error that is longer than 100 bytes long. Fixed a bug with swapping, which wouldn't swap out argument type information. MAJOR Change to shadow implementation. shadow(arg, 1) now returns arg, instead of the topmost shadow of arg. Also, set_shadowing_object is no longer called,since it is not needed anymore. (set_shadowing_object was used to set a shadow's pointer to the object it's shadowing.) Added Lars' read_file. In compatiblity mode, read_file works as expected, if called like the "old" way of calling read_file; i.e. read_file("blah", 1); would read the first line of blah. However, in non-compatibility mode, read_file("blah", 1); works as Lars' read_file would behave, that is, read from the first line of the file to the end of the file. Also, in EITHER mode, if you do read_file("blah"); it will read the entire file in as a string, and return that to you, and if you do read_file("blah", start, len); it will read from start, reading len lines, and return a string of all lines read in. Also, grab_file now takes a start and len argument, to be the starting line to read, and how many to read. This version does NOT have lars' new call_out()/this_player() feature. I will add this with the next version, for use with non-compatibility mode. Fixes in version 46-DR to 49-DR Fixed a bug with get_attribute, which made it always look at this_object(). Added Lars' call_out/this_player feature for non compatibility mode. Fixed a few potential memory leaks in array.c, which could occur if the returned array was 0 length (local buffers weren't being freed). Fixed a bug in make_func.y which would cause it to crash. Also, there is still a minor bug, which makes the order you give argument types (if an argument can be more than one type) order dependent (this is for func_spec.c). combine_free_list has been removed, unless you are using Lars' malloc package. Some people might have old code in their church using this functions... I've kept the -DR ls() efun, instead of making it a simulated efun, since the simul efun I created to simulate my ls was too slow. However, I've put a copy of it in mudlib_simul_efun.c (it probably needs a bit of work to get paths right, etc...) if you wish to use it. shutdown() can only be called from master.c. I have provided a function shut_down_game() in master.c which calls shutdown(). This is to protect anyone from being able to call shutdown() themselves and shutting the game down. (we had this happen accidentally on DR). You'll probably want to test previous_object() for whatever object you have authorized to call shutdown, inside shut_down_game(), to make sure it's being called correctly. Fixes in version 51 Added a function to master.c, valid_shout, which will return true if the object sent is able to receive a shout. I did this to further detach the parser from the mudlib (it used to call query_muffled on the object, not it gets master.c to do it, to make it more user definable). Fixed a bug in the new say(), which could crash the game. Moved possessive(), objective(), and subjective() to simul_efun.c. Remember to move the new mudlib_simul_efun.c into your obj directory if you use these functions... Fixes in version 52 There are none. Version 52 is version 51 with the say() bug fixed. Sort of silly to release a new version if you ask me... Fixes in version 53 Fixed a fatal bug with notify_fail, if this_player() == 0. Fixed a fatal bug with the new caching functions. first_inventory() and next_inventory() now are only defined in COMPAT_MODE by default. Move the definitions of these functions in func_spec.c if this is a problem. Fixed a typo in interpret.c, which had FGETUID instead of F_GETUID. This is probably the last version I will release that is based off of native mode 3.0 distributed in Sweden. I'm part of the -A project going on, and will add features from that version to my -DR version. Of course bug fixes found in either the -A, or native mode, will be incorporated into my -DR version; however, I don't like what the CDLIB people did, and are doing, and I do like most of what is going on with the -A version. 3.0 is as stable as any version of lp has ever been, now, so there really isn't much more to do, other than add new features, and fix bugs. I doubt any new design decisions will be made, for better or worse. Fixes in version 3.1.0 and 3.1.1 remove_action("verb") now removes the verb 'verb' from this_player(), if verb was defined by this_object(). This means that you can only remove_action() things that you added yourself (no way to remove actions remotely). This efun returns 1 if it was successful, 0 if the verb wasn't found, or wasn't defined by this_object(). Fixed a bug with previous_object(), which would return incorrect values in compat_mode. Fixed a bug with get_dir, which would crash the game. Fixes in version 3.1.2 Not much new in the LP world....... Read the DONE file for changes with 3.1.2. Limited the maximum number of call outs any one object can have. The constant MAX_CALL_OUTS_ALLOWED in config.h sets the max you can have. This is helpful to stop run-away call_outs. A value of -1 means no limit. Added a new efun, strsub, which takes 3 arguments: a string, an array of the format ({ "str", "rep", "str", "rep", ... }); and a mode, 0 means match anywhere. 1 means match prefix of word 2 means match suffix of word 3 means match exact word. This function scans the first argument, and replaces each instance of "str" with "rep", according to the rules given by mode. Also, each pattern is matched against the NEW string. strsub("How now brown cow", ({ "ow", "as"}), 0) would return "Has nas brasn cas" This efun is useful for text filters, such as DR's jive ring. Added back the MudOS mapping structures. Mappings don't save with save_object, yet. This I'll fix when I have the time. Look to TMI for documentation on mappings. Added a new efun, dumpobjs(start, end), which dumps the most recent objects, starting at start, ending at end, into a file /OBJDUMP. This is a more generic 'dumpallobjs' command. dumpobjs(0, 1000) would dump the last 1000 objects.