284 Release Notes
- Fixed: There was a nasty case (introduced in the last release) where
the server was deleting associative list values before they went out of use,
resulting in such syptoms as substitution of a different value for the one that
you put in the list. This was the cause of the file administration CGI application
getting messed up. (Xzar)
- Fixed: The pager locator should no longer show links to hub-distributed local games
that are not on a live port, once everyone has the new client. (Air Mapster)
- Fixed: savefiles were getting thrown out (ie closed) when all that remained
was a reference to the savefile's "dir" list. This was difficult to track
down because the savefile module was silently failing on bad savefile
references. That's fixed now too. (Jmurph, Darkness)
- You are now given the option to uninstall hub packages when an upgrade notice is
sent. (Deadron)
- You can now package the project source files (ie- for demos and libraries)
as well as the project binaries by using the "Package Files..." menu option in
DreamMaker. This is the recommended way of creating hub zipfiles.
- Added ASSERT() and CRASH(). Calling ASSERT(expression) verifies that the
expression you supply is true. (This is known as a sanity check.) If it is
not true, the proc will crash with an error message indicating the position in
the source code and the insane expression. CRASH(msg) causes the current
procedure to crash with the given error message; this is used internally by
ASSERT(), which is actually just a preprocessor macro defined in stddef.dm.
The nice thing about it is you get all the normal crash diagnostics, such as a
stack dump, to help track down the cause of the problem.
- Added TRUE and FALSE constants (1 and 0) to stddef.dm. These are good in
return values and assignments to make it obvious that you are dealing with a
boolean value. However, you probably shouldn't use expressions like:
retval = MyProc()
if(retval == FALSE) blah
It is usually safer in DM to use the implicit boolean evaluation instead:
retval = MyProc()
if(!retval) blah
For example, if MyProc() crashes or somehow forgets to explicitly return a
value (hence returning null), you almost always want to treat that the same
way as FALSE. (Spuzzum)